2

assign()使用or很容易修改函数外部的变量<<-,即使函数是使用 调用的lapply()。但是这些技巧在使用in packagemclapply()的并行版本调用函数时似乎不起作用: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()

我知道这应该小心使用,因为并行运行的函数可能会尝试修改可能导致严重同步错误的相同变量,但是在某些情况下它是有帮助的。

4

0 回答 0