找回密码
 立即注册
查看: 3629|回复: 0

基于parallel包的并行计算与函数内的全局变量引用

[复制链接]
发表于 2013-12-23 16:02:44 | 显示全部楼层 |阅读模式
本帖最后由 黑大兔 于 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?

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|R语言中文网

GMT+8, 2024-11-25 09:29 , Processed in 0.025773 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表