本帖最后由 黑大兔 于 2013-12-23 16:03 编辑
编写了一个简单的R脚本,采用parallel包实现对函数f(x, y)的并行计算。由于parLapply似乎只能传递一个向量(x)到函数func中,所以在这个脚本里,func在定义的时候只设置了一个参数:x,而我希望在函数体中引用全局变量y,从而实现对f(x, y)的计算。
脚本如下:
library(parallel)
func <- function(x) {
z <- 2 * x + .GlobalEnv$y # 引用全局变量y
return(z)
}
np <- detectCores(logical = FALSE)
x <- seq(1, 10, by = 1)
y <- 0.5
cluster <- makeCluster(np) # 初始化集群
results <- parLapply(cluster, x, func)
stopCluster(cluster)
z <- func(x)
print(z)
结果:
1. results是一个包含十个元素的空list,表明在并行计算过程中,func并没能引用y。
2. z <- func(x)输出[1] 2.5 4.5 6.5 8.5 10.5 12.5 14.5 16.5 18.5 20.5,说明在串行计算时,可以在函数内通过.GlobalEnv$y 的方式来引用y。
有没有办法能够使func在并行计算环境下访问变量y?
|