并行代码依赖于其他功能

时间:2017-03-30 09:47:21

标签: r function parallel-processing

这是我创建的函数的结构,其中已经实现了并行化。

    parallelized.function <- function(...){

          # Function used in the parallelization
            used.in.par <- function(...)
          # Function needed by used.in.par (auxiliars)
            aux1<-function(...)
            aux2<-function(...)
          #---------------------------------------------------#
          # PARALLELIZATION PROCESS
            suppressMessages(library(foreach))
            suppressMessages(library(doParallel))

                   ..................................

               %dopar%{ used.in.par(...) }

          #---------------------------------------------------#
         return(something)   
         }

代码有效,但它假定在aux1内定义aux2parallelized.function才能正常工作(需要大量代码行)。

有没有办法调用aux1aux2函数而不是在parallelized.function内编写所有代码?

我尝试使用辅助功能创建新脚本,并在source(".../aux1.R")内写source(".../aux2.R")parallelized.function但未成功。

谢谢,

1 个答案:

答案 0 :(得分:2)

foreach包会为您做到这一点。为了获取当前环境中未定义的功能,您应该使用.export;并且可以使用.packages选项在每个工作人员上加载所需的包。

foreach(
  ...,
  .export = c('aux1', 'aux2'),
  .packages = c(...)
) %dopar% {
  ...
}

请注意,不需要在foreach循环中加载foreachdoParallel包。但是当你注册集群时,你错过了这个部分。