r - 外循环的并行化在 REvolution 中有效,但在普通 R 中无效

标签 r loops foreach nested

我正在尝试并行化外循环,同时按顺序运行内循环。以下代码在使用 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/

相关文章:

r - 当 y 轴不是 r 中的数字时,如何将文本分配给 ggplot

javascript - JavaScript for 循环中的 jQuery 不起作用

python - 数值积分循环 Python

java - 使用 JSTL 打印 Java 列表的问题

c# - 性能 - 在使用 foreach 循环之前检查列表是否为空

php - 如何从magento中的foreach循环获取当前值

r - 如何使用 Node js 中的 rserve-js 将参数动态发送到 R 中的 Rserve?

r - R 中的 [ ] 和 [[ ]] 有什么区别?

r - 取出数据子集,取平均值,创建一个新的数据框。有更容易的方法吗?

Javascript - 显示 18 张图像然后停止