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

如何输出使用foreach迭代填充的两个向量?,r,foreach,parallel-processing,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 ... V

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

所有线程都可以访问共享内存

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)
库(大内存)

这不是foreach循环的工作方式。它们遵循函数式编程范式,不允许出现副作用。它们实际上更类似于sapply而不是for循环。总之,不能用foreach循环来填充向量(有一种方法,但这是一种不好的做法,不如for循环)。谢谢,我怀疑这不仅困难,而且可能(接近)不可能做到。我从使用foreach循环而不是for循环中获得的计算速度是明显的,但并不关键。但是,也许我可以避免这种填充向量的方法。有没有办法让foreach函数知道我希望在每次迭代时保存这两个值(根本不创建Va和Vb向量)?您可以返回c(a,b)并使用.combine=rbind获得矩阵。然后索引这两列来检索两个向量。谢谢!它工作得很好。我是函数式编程新手,所以感谢您回答了一个可能是非常基本的问题。@Albertdorado一个简单的解决方案是使用共享内存。请看下面我的答案。@AlbertDorador如果你同意这个答案,你可以接受它。