2012-03-28 15 views
3

データフレームの要約をまとめたリストがありますので、すべて1つのファイルに書きたいので、summary()という出力を含む1つのテキストファイルを作成できます各データフレーム上に存在する。リストの内容を1つのファイルに書き込む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 

任意のアイデア? 乾杯、 Davy。

答えて

6

あなたの提案された出力は標準的な印刷出力のように見えるので、印刷出力をファイルに取り込む方法があります。 1つの簡単な方法は、sink関数を使用して、lapplyに要約を出力させることです。または、capture.outputを使用して、結果を自分で保存することもできます(保存する前に変更または確認したい場合)。

これらが十分でない場合は、出力を生成している印刷機能のコードを見て、変更して情報をファイルに入れることができるかどうかを確認してください。データフレームのサマリー関数が文字列のテーブルを返すように見えるので、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)}) 

したい場合データをすべて同じ行に置いてから実行する前にオプション(幅= 200)を設定してください

+0

私はこれが一番クリーンな解決策だと思います。 – Hansi

0

出力をyamlに変換してテキストファイルに保存することを考えましたか?

  • これは人間が読める形式で、主にあなたが望むものです(私は推測します)。
  • テキストファイルから元のデータ構造を復元できます。

パッケージはyamlと呼ばれていると思います。

もちろん、指定した形式の出力が必要な場合は、私は受け入れられた答えにもっと同意できませんでした。