并行R包降雪的变量范围

时间:2015-04-16 05:18:14

标签: r snowfall

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

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

0 个答案:

没有答案