2016-07-21 10 views
1

ループの最後に7x30行列を返すforeachループで並列処理を実行しています。私は、このコマンドを使用してループを実行すると、それは11.5分で終了:r:foreach結果を結合する

myData<-foreach(i=1:270000, .packages='quadprog')%dopar%{ 

は残念ながら、MYDATAはリストであり、私はそのリスト内のすべての行列の最後の2つの列をプロットしたいです。だから、私はggplot2のためのデータフレームに変換するには、次のコマンドを使用します。

myData<-Reduce(rbind.data.frame, myData[1:length(myData)]) 

このコマンドは、小さなMYDATAが、MYDATAに適しています27万行列の長さです。ハングアップするか、変換するのに本当に長い時間がかかります。

だから、私は、出力が最初の場所でのデータフレームがあるように、このコマンドを使用してループを実行しよう:これは道長い11分以上(最後の2時間稼動している

myData<-foreach(i=1:270000, .combine=rbind.data.frame, .packages='quadprog')%dopar%{ 

)。

これらのループから効率的に出力を取得し、それをグラフ化できる形式にする方法はありますか?

興味深いことに、Windowsタスクマネージャを見ると、ループへの最初の呼び出しで、すべてのCPUコア使用率が100%にすぐに送信されます。同じ台数のクラスタをdoSnowの下に設定しても、2番目のクラスタは10%に近くなります。

答えて

0

使用rbindlistの代わり

comb = function(...)rbindlist(...) 
myData = foreach(i = 1:27000 , .combine = comb ,.packages='quadprog',.multicombine = TRUE) %dopar% { 
それをスピードアップするためにあなたの結果と.multicombineを組み合わせることrbind
関連する問題