R中

2012-03-28 77 views
3

寫列表的內容,在一個文件我有一堆dataframes的摘要清單,我想他們都寫入到一個文件,這樣我就可以有一個包含調用summary()輸出一個文本文件在每個數據幀上。R中

我嘗試這樣做:

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 

任何想法? 乾杯, 戴維。

回答

6

您建議的輸出看起來像標準打印輸出,所以您可能只想採取將打印輸出捕獲到文件的方法。一種簡單的方法是使用sink函數,然後用lapply打印摘要。或者您可以使用capture.output並自己保存結果(如果您想在保存前修改或檢查任何內容)。

如果它們沒有被suficcient然後看看在所生成的輸出打印功能的代碼,看看你是否可以修改把信息到文件中。它看起來像數據框上的彙總函數返回一個字符串表,所以print.table將是開始的地方。

1

這很可能會裂傷根據你的窗口當時的大小,但輸出應該工作:

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

跳過中間的功能,只是做:

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

如果你想運行

+0

我認爲這是最乾淨的解決方案。 – Hansi 2012-03-29 07:30:07

0

你有沒有考慮過你的輸出轉變到YAML並將其存儲在一個文本文件之前的數據全部是在同一行,然後設置選項(寬度= 200)?

  • 這是人類可讀的,這主要是你想要的(我推測)。
  • 您可以從文本文件中恢復原始數據結構。

我覺得這個包叫做yaml

當然,如果你需要在你指定的確切格式輸出,我無法接受的答案更多的認同。