如何将摘要(lm)保存到文件?

Pau*_*ine 21 r

我正在使用R进行药效学分析,而且我对编程很新.

问题是,我正在进行线性回归分析,将来我会执行更高级的方法.因为我正在执行大量的分析(而且每次运行脚本时我都懒得手动复制粘贴),我想将分析的摘要保存到文件中.我尝试过不同的方法,但似乎没什么用.

我正在寻找的是以下(最好)一个文本文件:

X_Y <- lm(X ~ Y)
sum1 <- summary(X_Y)

> sum1

Call:
lm(formula = AUC_cumulative ~ LVEF)

Residuals:
    Min      1Q  Median      3Q     Max 
-910.59 -434.11  -89.17  349.39 2836.81 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 1496.4215   396.5186   3.774 0.000268 ***
LVEF           0.8243     7.3265   0.113 0.910640    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 619.9 on 104 degrees of freedom
  (32 observations deleted due to missingness)
Multiple R-squared:  0.0001217, Adjusted R-squared:  -0.009493 
F-statistic: 0.01266 on 1 and 104 DF,  p-value: 0.9106
Run Code Online (Sandbox Code Playgroud)

我已经搜索了将汇总函数保存到.csv或.txt的方法,但这些文件并不以我能理解的方式表示数据.

我试过的事情:

fileConn <- file("output.txt")
writeLines(sum1, fileConn)
close(fileConn)
Run Code Online (Sandbox Code Playgroud)

返回:

Error in writeLines(sum1, fileConn) : invalid 'text' argument
Run Code Online (Sandbox Code Playgroud)

尝试使用write.table命令给出:

> write.table(Sum1, 'output.csv', sep=",", row.names=FALSE, col.names=TRUE, quote=FALSE)
Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : cannot coerce class ""summary.lm"" to a data.frame
Run Code Online (Sandbox Code Playgroud)

使用write命令:

> write(sum1, 'output.txt')
Error in cat(list(...), file, sep, fill, labels, append) : argument 1 (type 'list') cannot be handled by 'cat'
Run Code Online (Sandbox Code Playgroud)

然后我越来越接近以下内容:

> write.table(sum1, 'output.csv', sep=",", row.names=FALSE, col.names=TRUE, quote=FALSE)
Run Code Online (Sandbox Code Playgroud)

但是这个文件没有与打印摘要相同的可读信息

我希望有人可以提供帮助,因为这是我的高级编程方式.

Phi*_*hil 37

我认为一个选项可能sink()会将结果输出到文本文件而不是控制台.在没有您的数据集的情况下,我用cars了一个例子:

sink("lm.txt")
print(summary(lm(cars$speed ~ cars$dist)))
sink()  # returns output to the console
Run Code Online (Sandbox Code Playgroud)

lm.txt 现在看起来像这样:

Call:
lm(formula = cars$speed ~ cars$dist)

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 ***
cars$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
Run Code Online (Sandbox Code Playgroud)

@Roland的建议knitr涉及更多,但可能是值得的,因为你可以轻松地将输入,文本输出和数字编织到一个报告或html文件中.


cry*_*111 5

如果您想将数据重新导入 R 但仍希望将其保存在文本文件中,也可以使用 dput,例如,

dput(summary(lm(cars$speed~cars$dist)),file="summary_lm.txt",control="all")
Run Code Online (Sandbox Code Playgroud)

这允许通过重新导入摘要对象

res=dget("summary_lm.txt")
Run Code Online (Sandbox Code Playgroud)

我们来检查一下类res

class(res)
[1] "summary.lm"
Run Code Online (Sandbox Code Playgroud)


Mat*_*ewR 5

上面的建议效果很好。根据需要,可以将tidy()函数用于系数,而glance()用于表。

library( broom )
a <- lm(cars$speed ~ cars$dist)
write.csv( tidy( a ) , "coefs.csv" )
write.csv( glance( a ) , "an.csv" )
Run Code Online (Sandbox Code Playgroud)