2016-07-21 67 views
1

foreachループを実行して100個の行列のリストを作成しました。各ループの出力は1つの7×12行列です。さて、ggplot2を使ってこれらの行列の最後の2つの列である散布図を作成します。これを行うために、リストを1つの大きなdata.frameに変換する必要があるとわかります。その数字は700x12になります。他のポスターはベクトルのリストのためにこれを解決しましたが、私の状況に適したものはありません。ここでは、私が試したものです:基本Rでr:マトリクスのリストをデータフレームに変換する

as.data.frame(matrix(t(unlist(myList)), ncol=12))) 
rbind(myList[1:100]) 
+1

'library(data.table); rbindlist(lapply(myList、as.data.frame))' – akrun

+0

@ ashata.dableではありませんか? :p – MichaelChirico

+0

@MichaelChiricoはい、これは良いでしょう – akrun

答えて

1

、あなたが使用することができます:あなたのforeachループでは

Reduce(rbind.data.frame, myList[1:100]) 
+0

これはmyListが100個の行列を含んでいたときにうまくいきました。 myListを270kのマトリックスに増やした後、このコマンドが1時間実行された理由はありますか? – user3390169

+0

私はRパフォーマンスの専門家ではありませんが、 'Reduce'が' myList [1] 'と' myList [2] 'のプロセスを見つけて' rbind's 'myList [ 3] 'を読み込んでメモリに書き出します。 100個の行列があれば、これは大きな問題になるかもしれませんが、270 000の場合、必要な 'data.frame'の行数を事前に知っていれば、事前に作成してaループ。これにより、多くのメモリとパフォーマンスが節約されます。 – Jasper

1

を、あなたはデータフレームに行列を変換しないのはなぜ? xがあなたの行列である場合は、あなただけの最後にこれを追加することができます。

data.frame(x) 

あなたがされているとして、あなたはちょうどrbind(myList[1:100])を使用することができます。

+0

私はそれを試みましたが、foreachループは11分ではなく実行に数時間かかります。 – user3390169

+0

どのくらい奇妙ですか。 'as.data.frame(x)'を試してください。 –

関連する問題