我试图通过命令行调用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中是否有任何方法可以捕获摘要(Variable1)的输出并将结果写入输出文件?换句话说,我需要R来运行Variable1的摘要统计信息,捕获“Min”,“Median”和“Max”值,并将它们单独写入输出文本文件。在此示例中,输出文件应仅包含一行,其值为“1.00,2.00,4.00”(即“Min”,“Median”和“Max”值)。
上面的例子讨论了汇总函数。但是,我还需要使用其他命令(例如glm)
我对R来说相当新,并且想知道R中是否有办法可以做到这一点?
感谢您的帮助。
答案 0 :(得分:40)
一种简单的方法是将要打印的输出转换为文件,并通过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)
这将创建一个包含
的文件out.txtCall:
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
答案 1 :(得分: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()
的子集强制为一行矩阵。
答案 2 :(得分:7)
这里重要的是要了解摘要功能,如:
summary(Variable1)
不会打印摘要。它计算出摘要然后返回它。命令行处理器在弹出下一个'&gt;'之前进行打印提示。
很多R功能都是这样的。因此,您几乎总能通过赋值获得返回值。所以如果你这样做:
x = summary(Variable1)
那么就不会打印出来了。但是然后键入'x',它会。命令行打印最后评估的内容。
获得'x'后,您可以使用导入/导出方法保存以供日后使用。
答案 3 :(得分:4)
您可能还需要查看R Data Import/Export manual(第1.2节Export to text files)。
答案 4 :(得分: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
答案 5 :(得分:1)
您不需要导出到文件,只需使用summary(x)[1]表示min,summary(x)[2]表示第一季度值。