0

以下は、再現可能なコードのために問題を表す単なるおもちゃのサンプルですが、私のデータとデータに作用する後続の関数ははるかに複雑であり、実際には並行して実行することでメリットが得られます。

私が抱えている問題は、以下のループが %do% と %dopar% の両方で期待どおりに実行されることですが、%dopar% は %do% に比べて非常に遅いです。

私は問題を、非常に大きなリストを検索し、サブセットにインデックスを付けてそのリストからデータを取得し、それに何かをしているという事実に絞り込みました。

%dopar% をどのように改善できるかについて、誰かが洞察を提供できますか? 私の実際のデータでは、既にリストに格納されているデータ フレームをサブセット化し、その df を 4 つの異なる関数に渡す必要があります。

また、申し訳ありませんが、R-Help にこの質問を投稿しましたが、Stack Exchange で foreach に関するその他のアクティビティを参照してください。

N <- 200000
myList <- vector('list', N)
names(myList) <- 1:N
for(i in 1:N){
  myList[[i]] <- rnorm(100)
}
nms <- 1:N
library(foreach)
library(doParallel)
registerDoParallel(cores=7)

result <- foreach(i = 1:3) %do% {
dat <- myList[[which(names(myList) == nms[i])]]
mean(dat)
}

result <- foreach(i = 1:3) %dopar% {
dat <- myList[[which(names(myList) == nms[i])]]
mean(dat)
}
4

0 に答える 0