2016-10-17 16 views
1

大きな行列(Mat1)と小さなデータフレーム(Smalldf1)を出力する関数を "Result"というリストに格納しています。 この関数はループの中で実行されるので、 "FINAL"というリストにそれらを追加するたびに、私のループが終了するまで私の "Result"リストの多くのバージョンを作成します。ネストされたリストからrow.bind data.framesを抽出します。

私のループの終わりには、小さなデータフレームと大きなマトリックスを含む、より小さな「結果」リストが多数含まれているFINALというListがあります。

すべての小さなデータフレームをまとめて1つの大きなデータフレームを形成し、それをDF1と呼んでいます。リスト内のリストにアクセスしているので、これらのデータにアクセスする方法がわかりません。ここで

同様の質問は、このようなソリューション与えた:しかし、これはSmalldf1の記述に「Smalldf1」と呼ばれる単一の列として出力を与える

DF1 <- do.call("rbind",lapply(FINAL, function(x) x["Smalldf1"])) 

を...これは文字通りに印刷されている。すなわち列リスト(X1 = "xxx"、X2 = "xxx"、X3 = "xxx")...これは元の形式のように見えるように分割しておく必要があります。

助けがあれば助かります。

+0

dput()を使用してデータを入力してください。 –

+0

エラーが発生しました - lapply()のエラーRHSが表示されます関数名であるが見つかりません。 – PaulBeales

+0

はい - これは私のデータのように見えます。このデータであなたのソリューションを実行しています。このエラーが表示されます。エラー:オブジェクトをデータフレームに変換できません。 – PaulBeales

答えて

0

私は答えに自分のコメントを付けます。 do.callのいずれかで、

df <- data.frame(X1=1:3, X2=4:6, X3=7:9) 
FINAL=list(Result=list(Smalldf1=df, Mat1=as.matrix(df)), 
      Result=list(Smalldf1=df+1, Mat1=as.matrix(df+1))) 

は、あなたが最初に抽出するためにlapplyを組み合わせることができます(またはN番目は、ちょうど1変更)ネストされたリストの要素をし、この結果にrbindの操作を行います。これは、あなたのデータ可能性がありまたはdplyrで:

#### # Doing it in base R: 
do.call("rbind", lapply(FINAL, "[[", 1)) 
#### # Or doing it with dplyr: 
library(dplyr) 
lapply(FINAL, "[[", 1) %>% bind_rows 
#### X1 X2 X3 
#### 1 1 4 7 
#### 2 2 5 8 
#### 3 3 6 9 
#### 4 2 5 8 
#### 5 3 6 9 
#### 6 4 7 10 

は、これはあなたの期待どおりの結果でなければなりません

WARNING:dplyrを使用したソリューションは、オール用 動作しません。 dplyr(dplyr_0.5.0でテストしましたが、たとえばdplyr_0.2でエラーが返されます)

関連する問題