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

时间:2012-03-28 18:50:54

标签: r

我有一堆数据框摘要列表,我想将它们全部写入一个文件,因此我可以在每个数据框上有一个包含调用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 

我希望输出格式为:

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  

有什么想法吗? 干杯, 戴维。

4 个答案:

答案 0 :(得分:6)

您建议的输出看起来像标准打印输出,因此您可能只想采用将打印输出捕获到文件的方法。一种简单的方法是使用sink函数,然后让lapply打印摘要。或者您可以使用capture.output并自行保存结果(如果您想在保存之前修改或检查任何内容)。

如果那些不够用,那么请查看生成输出的print函数的代码,看看是否可以修改它以将信息放入文件中。看起来数据框上的汇总函数返回一个字符串表,因此print.table将成为开始的地方。

答案 1 :(得分:4)

跳过中间函数,然后执行:

lapply(dflist, function(i){  capture.output( print(  summary(i) ) , 
                                    file="test.txt", append=TRUE)})

如果您希望数据全部在同一行,则在运行

之前设置选项(宽度= 200)

答案 2 :(得分:1)

这很可能会根据您当时窗口的大小来修改输出,但应该可以正常工作:

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

答案 3 :(得分:0)

您是否考虑过将输出转换为yaml并将其存储在文本文件中?

  • 这是人类可读的,主要是你想要的(我猜)。
  • 您可以从文本文件中恢复原始数据结构。

我认为该软件包名为 yaml

当然,如果您需要的输出格式与您指明的格式完全一致,我更不同意接受的答案。