如何为并行计算选择变量名?

时间:2015-08-13 09:54:21

标签: r foreach parallel-processing

我使用foreach包进行并行计算。在循环中,我定义了具有固定名称的临时变量(例如" temp"),这些变量将在下一次迭代中被覆盖,因为这是我在经典循环中通常的方式。现在我想知道使用并行计算是否可行,或者在进行并行计算时是否会混淆变量。

基本上,基本问题是临时变量是否被赋予" local" (关于迭代)临时名称与否。程序是否在整个迭代过程中检测哪些变量具有相同的名称,以便为它们提供这样的“本地”#34;临时名称。

1 个答案:

答案 0 :(得分: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)