2

据我了解,从属进程无法访问 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

有人可以向我解释吗?感谢您的任何建议。

4

0 回答 0