当file = NULL与file = [文件名]时,R的capture.output()行为不同

时间:2014-08-06 19:13:16

标签: r

当使用capture.output(..., file = NULL)后跟您想要捕获的行的规范时,只捕获该行:

capture.output(summary(lm(speed ~ dist, data = cars)), file = NULL)[5]
[1] "Residuals:"

但是当指定文件名时,它将捕获整个对象:

capture.output(summary(lm(speed ~ dist, data = cars)), file = "Results.txt")[5]
NULL

Results.txt的内容:

Call:
lm(formula = speed ~ dist, data = cars)

Residuals:
    Min      1Q  Median      3Q     Max 
-7.5293 -2.1550  0.3615  2.4377  6.4179 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  8.28391    0.87438   9.474 1.44e-12 ***
dist         0.16557    0.01749   9.464 1.49e-12 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.156 on 48 degrees of freedom
Multiple R-squared:  0.6511,    Adjusted R-squared:  0.6438 
F-statistic: 89.57 on 1 and 48 DF,  p-value: 1.49e-12

如何让R和/或capture.output只将我想要的行写入文件(在这个玩具示例第5行中)?

2 个答案:

答案 0 :(得分:3)

我担心你不能在capture.output()内这样做,但你可以简单地将你想要的capture.output()输出部分写成文件例如,cat()

cat(capture.output(summary(lm(speed ~ dist, data = cars)))[5],file="Results.txt")

答案 1 :(得分:2)

在存在文件参数时,在提取“[”操作之前发生写入文件的副作用。因此,您需要在将值返回到控制台/全局环境后编写该值:

  cat( capture.output( summary(lm(speed ~ dist, data = cars)), file = NULL)[5] , 
         file="test.txt")

如果你需要反复使用它,将它包装成一个函数会很容易。