我正在尝试使用foreach
将for循环转换为循环。
我尝试了几种使用.combine
参数的输出方法,但我不能输出我创建的两个向量,首先启动它们以保存1e4零,然后在每次迭代时重新填充每个条目。
特别是,我无法恢复以这种方式创建的向量:
Va = numeric(1e4)
Vb = numeric(1e4)
result = foreach(j = 1:1e4, .multicombine=TRUE) %dopar%
{
... rest of the code ...
Va[j] = sample(4,1)
Vb[j] = sample(5,1)
list(retSLSP, retBH)
}
请注意,j是foreach
循环中的循环变量。另请注意,我显示的计算不是我的代码中的实际计算,但对于示例而言是等效的。
答案 0 :(得分:1)
您可以使用共享内存来访问所有线程。
library(bigmemory)
V <- big.matrix(1e4, 2)
desc <- describe(V)
result = foreach(j = 1:1e4, .multicombine=TRUE) %dopar%
{
V <- bigmemory::attach.big.matrix(desc)
... rest of the code ...
V[j, 1] = sample(4,1)
V[j, 2] = sample(5,1)
list(retSLSP, retBH)
}
Va <- V[, 1]
Vb <- V[, 2]
rm(V, desc)
尽管如此,按块进行并行化比对整个循环进行并行化更好。 例如:https://stackoverflow.com/a/45196081/6103040