在一个函数中,我需要对列表中的每个项目运行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内声明。
发布于 2012-12-03 18:00:21
您可以为函数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发布于 2012-12-03 17:56:27
函数闭包是你想要的吗?
创建一个f函数,它接受var.1作为参数,并返回myInnerFunction
f = function(var.1) {
var.1 = var.1
myInnerFunction <- function(xx) return(xx+var.1)
}那么myOuterFunction就是:
myOuterFunction <- function(list.x) {
var.1 <- 17
my = f(var.1)
tmp.1 <- mclapply(list.x, my, mc.cores=6)
return(tmp.1)
}和
myOuterFunction(list.x=list.1)按照预期工作。
https://stackoverflow.com/questions/13680683
复制相似问题