以下只是一个玩具样本,用于表示可重复代码的问题,但我的数据和后续功能对数据的影响更大,并且实际上可以从并行运行中受益。
我遇到的问题是下面的循环在%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)
}