【问题标题】:How to choose variable names for parallel computing?如何为并行计算选择变量名?
【发布时间】:2015-08-13 09:54:21
【问题描述】:
我正在使用foreach 包进行并行计算。在循环中,我定义了具有固定名称(如“temp”)的临时变量,这些变量将在下一次迭代中被覆盖,因为我通常在经典循环中这样做。现在我想知道这是否可以使用并行计算,或者在进行并行计算时是否会混淆变量。
基本上,潜在的问题是临时变量是否被赋予“本地”(相对于迭代)临时名称。程序是否在整个迭代过程中检测到哪些变量具有相同的名称,从而给它们这个“本地”临时名称。
【问题讨论】:
标签:
r
foreach
parallel-processing
【解决方案1】:
“foreach”在这方面遵循与“for”相同的逻辑。临时对象不会在全局环境中。请看下面的示例。
library(foreach)
library(doSNOW)
cores <- 2
cl <- makeCluster(cores)
registerDoSNOW(cl)
# data
n <- 4
m <- lapply(1:n, function(i) matrix((1:4), 2, 2))
rnames <- c("r1", "r2")
x <- foreach (i = 1:n) %dopar% {
temp <- m[[i]] * i
temp <- as.data.frame(temp)
data.frame(r = rnames, temp)
}
x # each new matrix are in the correct order in the output list
temp # it exist only inside the foreach
stopCluster(cl)