据我了解,从属进程无法访问R包降雪中全局/父环境中的变量。
例如,下面的代码会给出我预期的错误消息:
parfun <- function(i, var1, var2) {
return(var3)
}
var3 <- 'VAR3'
library(snowfall)
sfInit(parallel = TRUE, cpus = 2)
res <- sfLapply(seq(1, 2), parfun, 'VAR1', 'VAR2')
res
错误消息:
Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: object 'var3' not found
但是,当另一个函数中的并行代码时没有错误消息。
fun1 <- function(var1, var2, var3) {
parfun <- function(i, var1, var2) {
return(var3)
}
library(snowfall)
sfInit(parallel = TRUE, cpus = 2)
res <- sfLapply(seq(1, 2), parfun, var1, var2)
res
}
fun1('VAR1', 'VAR2', 'VAR3')
结果如下:
[[1]]
[1] "VAR3"
[[2]]
[1] "VAR3"
我不理解这种行为,因为函数var3
中不存在parfun
,而是在他的父环境fun1
中。
有人可以向我解释一下吗?感谢您的任何建议。