2017-02-17 17 views
12

foreachパッケージに機能/バグがありますが、わかりません。foreachパッケージ内のリストの構造

私はforeachパッケージでforループを作成しました(私はそれらをmutlicoreの計算と一緒に使用しましたが、ここではsequentiellの例ではバグが両方の亜種に表示されています)。このループはr回実行されます。すべての実行で、cエントリのリストが返されます。だから私はrエントリのリストを期待し、すべてのエントリはcリストで構成されています。

私のコードは次のようだった。

このコードで
library(foreach) 

clusters <- 10 
runs <- 100 

temp <- foreach(r = 1:runs, 
       .combine = 'list', 
       .multicombine = TRUE) %do% { 

       signal_all <- lapply(1:clusters, function(x){ 

       return(1) 

       }) 

       return(signal_all) 
      } ## end do 

、すべての作品が期待されるよう、以下の画像を参照してください。

enter image description here

しかしruns <- 101が増加するとき、出力tempがありますこれは:

enter image description here

予想されるリスト構造が破棄されました。しかし、.combine = 'list'の行をコメントアウトすると、すべて期待どおりに動作します。

library(foreach) 

clusters <- 10 
runs <- 100 

temp <- foreach(r = 1:runs, 
       .multicombine = TRUE) %do% { 

       signal_all <- lapply(1:clusters, function(x){ 

       return(1) 

       }) 

       return(signal_all) 
      } ## end do 

enter image description here

誰かがこの動作を説明できますか? 助けてくれてありがとう!

答えて

4

私は解決策を見つけました。

foreach関数は、パフォーマンスを向上させるために、いくつかのコマン関数(たとえば、cまたはcbind)が多くの引数を取ることを認識し、最大100個の引数(デフォルト)を呼び出します。引き数.maxcombineを使用すると、それらを手動で設定できます。

library(foreach) 

clusters <- 10 
runs <- 101 

temp <- foreach(r = 1:runs, 
       .combine = 'list', 
       .maxcombine = runs, 
       .multicombine = T) %do% { 

       signal_all <- lapply(1:clusters, function(x){ 

       return(1) 

       }) 

       return(signal_all) 
      } ## end do 
関連する問題