R foreach并行找不到全局函数

标签 r foreach parallel-processing lapply

我尝试用并行 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,d​​ays- 是常数。

STLst 是(xts 的)列表列表。

如果我这样做,一切都会好起来的(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)
 ...
}

结果,我遇到了错误:dRetlst(a) 中出现错误: 任务 1 失败 - “找不到函数“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)
}

关于R foreach并行找不到全局函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28561546/

相关文章:

python - 查找 Python 进程及其所有子进程使用的总内存

python - if(interactive()) 是等同于 pythonic “if __name__ == ” __main_ _“: main()” 的 R 吗?

r - 使用包 texreg 和 RStudio/rmarkdown/knitr 创建模型汇总表的问题

R,for 数据框列上的循环并需要来自其他列的值

php - 发布表单值,其中字段名称是从循环动态创建的?

c# - 如何在一个 foreach 中跳过结果迭代

R - 读取内联base64 png图像并解析文本

javascript - 在 promise 中循环数组并将其作为参数传递给下一个 promise 后,如何在链接时返回一个值?

python - 使用多处理填充 3D 数组

lisp - Common Lisp 并行采样