全局变量和并行处理

时间:2019-04-06 22:13:45

标签: r parallel-processing

我正在尝试使用partitionspblapply处理大型分区数据帧parallel。但是,似乎每个线程都无法访问全局变量。

a是另一个大型数据框。如何使该功能可以访问a

请参见下面的虚拟脚本:

library(pbapply)
library(parallel)

partitions <- list(c(1:5),
                   c(6:10),
                   c(11:15))
a <- 1

myfn <- function(x, add = a) {
  out = x + a
  return(out)
}

pblapply(nums, myfn,
         cl = makeCluster(detectCores() - 1))

这会引发错误:

Error in checkForRemoteErrors(val) : 
  3 nodes produced errors; first error: object 'a' not found

1 个答案:

答案 0 :(得分:1)

您应该显式传递add参数:

cl <- makeCluster(detectCores() - 1)
pblapply(
  partitions, 
  function(x, add) x + add, 
  cl = cl, 
  add = a
)
stopCluster(cl)