使用assign()
或<<-
修改函数外部的变量很容易,即使使用lapply()
调用该函数也是如此。但是这些技巧似乎在使用mclapply()
调用函数时无效,lapply()
是包multicore
中require(multicore)
f <- function(i) {
x[i] <- x[i] + 1
y[i] <<- y[i] + 1
}
x <- y <- 1:10
invisible(lapply(1:5, f))
x # 1 2 3 4 5 6 7 8 9 10, not changed
y # 2 3 4 5 6 6 7 8 9 10, variables 1 to 5 changed
# Now running with mclapply
x <- y <- 1:10
invisible(mclapply(1:5, f))
x # 1 2 3 4 5 6 7 8 9 10, not changed
y # 1 2 3 4 5 6 7 8 9 10, not changed again!
的并行版本:
mclapply()
如何执行相同的任务 - 在{{1}}调用函数的同时修改函数外部的变量?
我知道应该小心使用,因为并行运行的函数可能会尝试修改可能导致严重同步错误的同一个变量,但在某些情况下它会很有用。