在一个函数中,我需要为列表中的每个项目运行 mclapply
,它还应该使用一个半全局变量 var.1
。我不想将 var.1
添加到每个列表项,因为它会占用太多内存。这是说明问题的代码:
library(parallel)
list.1 <- list(1,2,3,4)
myInnerFunction <- function(xx) {
return(xx+var.1)
}
myOuterFunction <- function(list.x) {
var.1 <- 17
tmp.1 <- mclapply(list.x, myInnerFunction, mc.cores=6)
return(tmp.1)
}
results <- myOuterFunction(list.x=list.1)
[1] "Error in FUN(X[[1L]], ...) : object 'var.1' not found\n"
results[[1]] # This should be 18
如何将 var.1
传递给 mclapply
? var.1
必须在 myOuterFunction
中声明。
最佳答案
您可以为函数 myInnerFunction
创建第二个 (var.1
) 参数:
myInnerFunction <- function(xx, var.1) {
return(xx+var.1)
}
现在可以在 mclapply
命令中为 myInnerFunction
函数传递第二个参数:
myOuterFunction <- function(list.x) {
var.1 <- 17
tmp.1 <- mclapply(list.x, myInnerFunction, var.1, mc.cores=6)
return(tmp.1)
}
结果:
results <- myOuterFunction(list.x=list.1)
[[1]]
[1] 18
[[2]]
[1] 19
[[3]]
[1] 20
[[4]]
[1] 21
关于r - mclapply 的半全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13680683/