4

パッケージで使用foreachしてdoParallel、次のような異なる次元の 2 つのデータ フレームのリストを返すとします。

a<-NULL
b<-NULL
for(i in 1:100){
  a<-rbind(a,data.frame(input=i,output=i/2))
  if(i > 5){
    b<-rbind(b,data.frame(input=i,output=i^2))
  }
}
list(a,b)

はオブジェクトを返すためforeach、(少なくとも私には) 上記を で行う明白な方法はありませんforeach

注: これは私が実際に取り組んでいる問題の単純化されたバージョンであるため、lapply (またはそれらの線に沿ったもの) を使用して問題を解決することはできません。私の質問の精神は、 でこれを行う方法ですforeach

4

2 に答える 2

8

私はそれを考え出した。リストを希望どおりに組み合わせる独自の関数を定義する必要があります。

#takes an arbitrary number of lists x all of which much have the same structure    
comb <- function(x, ...) {  
      mapply(rbind,x,...,SIMPLIFY=FALSE)
}

foreach(i=1:10, .combine='comb') %dopar% {
      a<-rbind(a,data.frame(input=i,output=i/2))
      if(i > 5){
        b<-rbind(b,data.frame(input=i,output=i^2))
      }
      list(a,b)
}
于 2014-12-03T19:46:58.717 に答える