2009-11-14 67 views
21

我試圖通過經由命令行調用R作爲如下方式運行分析:的R - r輸出的捕獲元件成文本文件

R --no-save <SampleProgram.R> SampleProgram.opt 

例如,考慮下面的簡易R程序:

mydata = read.csv("test.txt", header=T) 
attach(mydata) 
summary(Variable1) 
q() 

輸出(僅部分示出)顯示在SampleProgram.opt:

> mydata = read.csv("test.txt", header=T) 
> attach(mydata) 
> summary(Variable1) 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
    1.00 1.00 2.00 2.47 3.00 4.00 
> q() 

此簡易R程序是將由需要使用爲Variable1顯示的彙總統計信息的腳本執行。

現在的問題是:在R中有捕獲摘要輸出(變量1)並將結果寫入輸出文件的方法嗎?換句話說,我需要R運行Variable1的彙總統計信息,捕獲「Min」,「Median」和「Max」值,並將其單獨寫入輸出文本文件。在這個例子中,輸出文件應該只包含一行,其值爲「1.00,2.00,4.00」(即「Min」,「Median」和「Max」值)。

上面的例子講述了彙總功能。但是,我需要用其他命令(如glm)來做到這一點(如glm)

我對R相當陌生,想知道在R中是否有辦法做到這一點?

感謝您的幫助。

回答

4

您還可以訪問summary命令的各個屬性。例如

> x=summary(seq(1:10)) 
> attributes(x) 
> attributes(x) 
$names 
[1] "Min." "1st Qu." "Median" "Mean" "3rd Qu." "Max." 

$class 
[1] "table" 

> x["1st Qu."] 
1st Qu. 
3.25 
10

方法有很多種:

  • 使用sink()
  • 通過file()打開一個文件,在文件中寫的結果是
  • 地方你的代碼,並通過R CMD BATCH file.R運行它創建輸出
  • 通過write.table()或其變體明確地寫結果數據,如write.csv()

這是非常基本的,所以你可能會從閱讀「介紹R」手動,或對R.

的衆多書籍之一受益最簡單的解決方案可能是

R> X <- rnorm(100) 
R> summary(X) 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
-2.480 -0.618 -0.223 -0.064 0.609 2.440 
R> write.table(matrix(summary(X)[c(1,3,6)], nrow=1), \ 
       file="/tmp/foo.txt", col.names=FALSE, row.names=FALSE) 
R> system("cat /tmp/foo.txt") 
-2.48 -0.223 2.44 
R> 

,我逼summary()的子集是一行的矩陣。

+7

'寫(彙總(X)[C(1,3,6),文件= 「的test.txt」)'更簡單;) – rcs 2009-11-14 17:44:25

+0

好的,謝謝:) – 2009-11-14 17:47:14

+0

衛生署,和Ian提醒我們兩個關於貓(...,文件= ...) – 2009-11-14 18:01:52

39

一種簡單的方法是將要打印的輸出轉換爲文件,並通過capture.output將其轉換爲文本字符串。那麼你可以簡單地將輸出捕獲到文件中。

dat<-data.frame(a=rnorm(100),b=rnorm(100),c=rnorm(100)) 
mod<-lm(a~b+c,data=dat) 
out<-capture.output(summary(mod)) 
cat(out,file="out.txt",sep="\n",append=TRUE) 
out<-capture.output(vcov(mod)) 
cat(out,file="out.txt",sep="\n",append=TRUE) 

這創建了一個文件。TXT含

Call: 
lm(formula = a ~ b + c, data = dat) 

Residuals: 
    Min  1Q Median  3Q  Max 
-2.67116 -0.81736 -0.07006 0.76551 2.91055 

Coefficients: 
      Estimate Std. Error t value Pr(>|t|) 
(Intercept) 0.01196 0.11724 0.102 0.919 
b   0.11931 0.12601 0.947 0.346 
c   -0.09085 0.13267 -0.685 0.495 

Residual standard error: 1.171 on 97 degrees of freedom 
Multiple R-squared: 0.0183, Adjusted R-squared: -0.001944 
F-statistic: 0.9039 on 2 and 97 DF, p-value: 0.4084 

       (Intercept)    b    c 
(Intercept) 0.0137444761 -0.0006929722 -0.0005721338 
b   -0.0006929722 0.0158784141 0.0042188705 
c   -0.0005721338 0.0042188705 0.0176018744 
7

這裏最重要的是學會了彙總函數,如:

summary(Variable1) 

不打印摘要。它計算出摘要並返回。命令行處理器在彈出下一個'>'提示符之前執行打印。

很多R函數都是這樣工作的。因此,您幾乎總是可以通過賦值獲取返回值。所以如果你這樣做:

x = summary(Variable1) 

然後它不會被打印。但是,然後鍵入'x',它會。命令行打印評估的最後一件事。

一旦你有'x',你可以使用導入/導出方法保存以備後用。

1

你不需要導出到文件中,只需要使用匯總(X)[1]分鐘,摘要(X)[2]一季度值。