我有一堆数据框摘要列表,我想将它们全部写入一个文件,因此我可以在每个数据框上有一个包含调用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
有什么想法吗? 干杯, 戴维。
答案 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 。
当然,如果您需要的输出格式与您指明的格式完全一致,我更不同意接受的答案。