这是我创建的函数的结构,其中已经实现了并行化。
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
内定义aux2
和parallelized.function
才能正常工作(需要大量代码行)。
有没有办法调用aux1
和aux2
函数而不是在parallelized.function
内编写所有代码?
我尝试使用辅助功能创建新脚本,并在source(".../aux1.R")
内写source(".../aux2.R")
和parallelized.function
但未成功。
谢谢,
答案 0 :(得分:2)
foreach
包会为您做到这一点。为了获取当前环境中未定义的功能,您应该使用.export
;并且可以使用.packages
选项在每个工作人员上加载所需的包。
foreach(
...,
.export = c('aux1', 'aux2'),
.packages = c(...)
) %dopar% {
...
}
请注意,不需要在foreach循环中加载foreach
和doParallel
包。但是当你注册集群时,你错过了这个部分。