2009-11-14 30 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]一季度值。