R - 将R输出的元素捕获到文本文件中

Kar*_*hik 21 command-line r

我试图通过命令行调用R运行分析,如下所示:

R --no-save < SampleProgram.R > SampleProgram.opt
Run Code Online (Sandbox Code Playgroud)

例如,考虑下面的简单R程序:

mydata = read.csv("test.txt", header=T)
attach(mydata)
summary(Variable1)
q()
Run Code Online (Sandbox Code Playgroud)

输出显示在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()
Run Code Online (Sandbox Code Playgroud)

这个简单的R程序将由需要使用为Variable1显示的摘要统计信息的脚本执行.

问题是:R中是否有任何方法可以捕获摘要(Variable1)的输出并将结果写入输出文件?换句话说,我需要R来运行Variable1的摘要统计信息,捕获"Min","Median"和"Max"值,并将它们单独写入输出文本文件.在此示例中,输出文件应仅包含一行,其值为"1.00,2.00,4.00"(即"最小","中值"和"最大"值).

上面的例子讨论了汇总函数.但是,我也需要使用其他命令(例如glm)

我是R的新手,想知道R中是否有办法可以做到这一点?

谢谢您的帮助.

Ian*_*ows 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)
Run Code Online (Sandbox Code Playgroud)

这会创建一个包含的文件out.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
Run Code Online (Sandbox Code Playgroud)


Dir*_*tel 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> 
Run Code Online (Sandbox Code Playgroud)

我迫使子summary()集成为一行的矩阵.

  • `write(summary(X)[c(1,3,6)],file ="test.txt")`更简单;) (7认同)

Spa*_*man 7

这里重要的是要了解摘要函数,如:

summary(Variable1)
Run Code Online (Sandbox Code Playgroud)

不打印摘要.它计算出摘要然后返回它.命令行处理器在弹出下一个">"提示之前进行打印.

很多R函数都是这样工作的.因此,您几乎总能通过赋值获得返回值.所以,如果你这样做:

x = summary(Variable1)
Run Code Online (Sandbox Code Playgroud)

然后就不会打印出来了.但是然后键入'x',它会.命令行打印最后评估的内容.

获得'x'后,您可以使用导入/导出方法保存以供日后使用.


csg*_*pie 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
Run Code Online (Sandbox Code Playgroud)