全局变量和并行处理

问题描述 投票:0回答:1

我正在尝试使用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
r parallel-processing
1个回答
1
投票

你应该明确传递add参数:

cl <- makeCluster(detectCores() - 1)
pblapply(
  partitions, 
  function(x, add) x + add, 
  cl = cl, 
  add = a
)
stopCluster(cl)
© www.soinside.com 2019 - 2024. All rights reserved.