4

我正在尝试并行化一个外循环,同时按顺序运行内循环。以下代码在使用包时在 Revolution 中工作,但在使用和包doSMP时它在基础 R 中不起作用(Windows 机器上的两个 R 版本)。错误信息是:。任何想法如何解决这个问题?foreachdoParallelcould not find function "%do%"

foreach(j = X, .combine = c) %dopar% { 
    Z=1
    foreach(i = Y, .combine = c) %do% { 
        paste(j, i, Z, sep = "") 
    } 
}
4

1 回答 1

4

通常,如果您需要在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 继承所有当前加载的包。但是,最好指定它们以使代码更具可移植性。

于 2013-10-07T22:21:44.850 回答