我正在尝试在 R 中使用几个 foreach 循环来并行填充一个公共(public)数组。我正在尝试做的一个非常简化的版本是:
library(foreach)
set.seed(123)
x <- matrix(NA, nrow = 8, ncol = 2)
foreach(i=1:8) %dopar% {
foreach(j=1:2) %do% {
l <- runif(1, i, 100)
x[i,j] <- i + j + l #This is much more complicated in my real code.
}
}
我想编写代码来更新矩阵
x
并行并且输出如下所示:> x
[,1] [,2]
[1,] 31.47017 82.04221
[2,] 45.07974 92.53571
[3,] 98.22533 12.41898
[4,] 59.69813 95.67223
[5,] 63.38633 55.37840
[6,] 102.94233 56.61341
[7,] 78.01407 69.25491
[8,] 26.46907 100.78390
但是,我似乎无法弄清楚如何更新数组。我试过把
x <-
其他地方,但它似乎不喜欢它。我认为这将是一件很容易解决的事情,但我所有的搜索还没有把我带到那里。谢谢。
最佳答案
foreach
循环用于它们的返回值,如 lapply
.通过这种方式,它们与 for
非常不同。用于其副作用的循环。通过使用适当的 .combine
函数,内部foreach
循环可以返回由外部 foreach
按行组合成矩阵的向量环形:
x <- foreach(i=1:8, .combine='rbind') %dopar% {
foreach(j=1:2, .combine='c') %do% {
l <- runif(1, i, 100)
i + j + l
}
}
您也可以使用嵌套运算符:
%:%
:x <- foreach(i=1:8, .combine='rbind') %:%
foreach(j=1:2, .combine='c') %dopar% {
l <- runif(1, i, 100)
i + j + l
}
请注意
set.seed
可能不会做你想做的事,因为它是在本地机器上执行的,而随机数是在不同的 R session 中生成的,可能在不同的机器上。
关于r - R中的嵌套foreach循环以更新公共(public)数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17508238/