为什么函数中的函数在并行运行时不能在R中使用其父函数的环境

时间:2017-12-29 11:20:35

标签: r

这里,我有一个名为f()的函数,我导入了一些我需要的包。我还在g()中定义了一个名为f()的函数。但我发现g()无法使用我之前导入的包中定义的函数,如果我想并行g。

f=function()
{
   command 1...
   library(pkg1)... # there is a function named t(),for example
   library(pkg2)...
   g=function(x)
   {
      t()  # function from pkg1
   }
   library(parallel)
   cl <- makeCluster(core,outfile="")
   result=parLapply(cl,x,g) # error, the t is not defined
   stopCluster(cl)

}

1 个答案:

答案 0 :(得分:0)

您必须将函数和库导出到集群, 例如:

cl <<- makeCluster(length(Tasks), type = "PSOCK")
clusterEvalQ(cl,c(library(httr),library(XML),library(magrittr),library(xml2)))

clusterEvalQ(cl,expr)将列出的库导出到集群,以便它们可以使用它们。 你必须使用 clusterExport(cl,varlist)

对变量做同样的事情