R foreach parallel找不到全局函数

R foreach parallel can not find global function

我尝试用并行 foreach 替换 lapply 函数。 我有两个功能:

 dRet <- function(x,per,sloss,daysToReopt){
 ...
 }
 getSum <- function(curEnv,perTP){
  ...
  dRetlst <- function(x) return(dRet(x,perTP,sl,days))
  Es_1 <- lapply(stlst,dRetlst)
  Es_2 <- foreach(a = stlst) %do% dRetlst(a)
  ...
 }

perTp,sl,days- 不变。

stlst 是列表列表(xts)。

如果我这样做,一切都会OK(Es_1等于Es_2)。

我已经替换了getSum函数:

getSum <- function(curEnv,perTP){
 ...
 dRetlst <- function(x) return(dRet(x,perTP,sl,days))
 cl<-makeCluster(2)
 registerDoParallel(cl)
 #registerDoSNOW(cl)
 Es_2 <- foreach(a = stlst) %dopar% dRetlst(a)
 stopCluster(cl)
 ...
}

结果,我出错了:Error in dRetlst(a) : task 1 failed - "can not find function "dRet""

如何在不将 dRet 添加到 getSum 的情况下解决此问题?

(R 版本 3.1.2, Windows 8)

使用 foreach .export 选项显式导出 dRet 给工人:

Es_2 <- foreach(a = stlst, .export='dRet') %dopar% dRetlst(a)

此外,我认为 foreach 循环会更具可读性:

Es_2 <- foreach(a = stlst, .export='dRet') %dopar% {
    dRet(a,perTP,sl,days)
}