gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:18:56 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com