如何输出使用foreach迭代填充的两个向量?

时间:2017-02-22 19:18:16

标签: r foreach parallel-processing

我正在尝试使用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循环中的循环变量。另请注意,我显示的计算不是我的代码中的实际计算,但对于示例而言是等效的。

1 个答案:

答案 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