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)
}
我尝试用并行 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)
}