在R中将列表内容写入一个文件

3

我有一份数据框的摘要列表,我想把它们全部写入一个文件中,这样我就可以得到一个包含每个数据框调用 summary() 输出的单个文本文件。

我尝试了以下方法:

 dflist = lapply(1:4, function(x){df = data.frame(SID=paste("S",1:10,sep=""),matrix(runif(100),nrow=10,ncol=10))})
 sumlist  = lapply(dflist, function(df){summary(df)})
lapply(sumlist, function(i){write(i,"all_data_summary.txt",append=T )})

它有点起作用,但它将每个变量的摘要级别写入新行,并且不包括变量名称,就像这样:

S1     :1  
S10    :1  
S2     :1  
S3     :1  
S4     :1  
S5     :1  
(Other):4  
Min.   :0.1557  
1st Qu.:0.2284  
Median :0.5109  
Mean   :0.4707  
3rd Qu.:0.6471  
Max.   :0.9509  
NA
Min.   :0.05512  
1st Qu.:0.14310  
Median :0.20889  
Mean   :0.41891  
3rd Qu.:0.78261  
Max.   :0.97565  
NA
Min.   :0.01937  
1st Qu.:0.23876  
Median :0.57103  
Mean   :0.50806  
3rd Qu.:0.70491  
Max.   :0.95610  
NA
Min.   :0.0212  
1st Qu.:0.3445  
Median :0.5634  
Mean   :0.5554  
3rd Qu.:0.7484  
Max.   :0.9797 

I would like the output to be of the form:

List Element 1              
SID X1  X2  X3  X4
S1     :1   Min.   :0.1557      Min.   :0.05512     Min.   :0.01937     Min.   :0.0212  
S10    :1   1st Qu.:0.2284      1st Qu.:0.14310     1st Qu.:0.23876     1st Qu.:0.3445  
S2     :1   Median :0.5109      Median :0.20889     Median :0.57103     Median :0.5634  
S3     :1   Mean   :0.4707      Mean   :0.41891     Mean   :0.50806     Mean   :0.5554  
S4     :1   3rd Qu.:0.6471      3rd Qu.:0.78261     3rd Qu.:0.70491     3rd Qu.:0.7484  
S5     :1   Max.   :0.9509      Max.   :0.97565     Max.   :0.95610     Max.   :0.9797  
(Other):4               
List Element 2              
SID X1  X2  X3  X4
S1     :1   Min.   :0.1557      Min.   :0.05512     Min.   :0.01937     Min.   :0.0212  
S10    :1   1st Qu.:0.2284      1st Qu.:0.14310     1st Qu.:0.23876     1st Qu.:0.3445  
S2     :1   Median :0.5109      Median :0.20889     Median :0.57103     Median :0.5634  
S3     :1   Mean   :0.4707      Mean   :0.41891     Mean   :0.50806     Mean   :0.5554  
S4     :1   3rd Qu.:0.6471      3rd Qu.:0.78261     3rd Qu.:0.70491     3rd Qu.:0.7484  
S5     :1   Max.   :0.9509      Max.   :0.97565     Max.   :0.95610     Max.   :0.9797  

有什么想法吗? 谢谢, Davy.
4个回答

6
您提出的输出看起来像标准的打印输出,因此您可能希望采用将打印输出捕获到文件的方法。一种简单的方法是使用sink函数,然后让您的lapply打印摘要。或者,如果您想在保存之前修改或检查任何内容,则可以使用capture.output并自行保存结果。
如果这些不够,请查看生成输出的打印函数的代码,并查看是否可以修改该代码以将信息放入文件中。看起来数据框的摘要函数返回一个字符串表格,因此print.table是开始的地方。

4
跳过中间函数,直接执行以下操作:
lapply(dflist, function(i){  capture.output( print(  summary(i) ) , 
                                    file="test.txt", append=TRUE)})

如果您希望所有数据都在同一行上,则在运行之前设置options(width=200)。

我认为这是最清晰的解决方案。 - Hansi

1

这很可能会根据您的窗口大小而使输出混乱,但应该可以工作:

lapply(sumlist, function(i){out <- capture.output(print(i));cat(out,sep="\n",file="all_data_summary.txt",append=TRUE)}) -> .ans

0
你考虑过将输出转换为 YAML 格式并存储在文本文件中吗?
  • 它是人类可读的,这正是您想要的(我想)。
  • 您可以从文本文件中恢复原始数据结构。

我认为该软件包称为yaml

当然,如果您需要确切格式的输出,则我完全同意已接受的答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接