我正在尝试并行化外循环,同时按顺序运行内循环。以下代码在使用 doSMP
时适用于 Revolution包,但在使用 foreach
时它在基础 R 中不起作用和 doParallel
包(Windows 机器上的两个 R 版本)。错误信息是:could not find function "%do%"
.任何想法如何解决这个问题?
foreach(j = X, .combine = c) %dopar% {
Z=1
foreach(i = Y, .combine = c) %do% {
paste(j, i, Z, sep = "")
}
}
最佳答案
一般来说,如果你需要在 foreach
中使用一个包循环,您应该使用“.packages”选项指定它。对于 foreach
来说也是如此包本身:
library(doParallel)
cl <- makePSOCKcluster(3)
registerDoParallel(cl)
foreach(j = X, .combine = c, .packages='foreach') %dopar% {
Z=1
foreach(i = Y, .combine = c) %do% {
paste(j, i, Z, sep = "")
}
}
当您意识到 PSOCK 集群甚至不知道它正在被
foreach
使用时,这是有道理的。 .它只是一个普通的 PSOCK 集群。请注意,可能没有必要使用某些并行后端指定所有必需的包。例如,使用 doMC,worker 会继承所有当前加载的包。但是,指定它们是一种很好的做法,以便代码更具可移植性。
关于r - 外循环的并行化在 REvolution 中有效,但在普通 R 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10435153/