带两个参数的并行 foreach

use*_*187 3 foreach r doparallel

我有这个代码:

  library(doParallel)
    registerDoParallel(cores = 8)

    result = foreach(A = c(1, 2, 3),B = c(10, 20), .combine = list) %dopar% {
    A*B
}
Run Code Online (Sandbox Code Playgroud)

结果

[[1]]
[1] 10

[[2]]
[1] 40
Run Code Online (Sandbox Code Playgroud)

但我想要:10、20、30、20、40、60

RHe*_*tel 5

A和中的值B是并行前进的迭代器。这不是嵌套循环。在这样的foreach构造中,在每次迭代之后,选择序列的下一个值A 序列的下一个值B,直到到达任一序列的末尾。A一个不是特别优雅的解决方法是以B有序的方式大幅增加序列的大小,如下所示:

library(doParallel)
registerDoParallel(cores = 8)
result <- foreach( A =rep(c(1,2,3),2), B = rep(c(10, 20), each=3), 
                  .combine='cbind') %dopar% { A*B }
#> result
#     result.1 result.2 result.3 result.4 result.5 result.6
#[1,]       10       20       30       20       40       60
Run Code Online (Sandbox Code Playgroud)

当然有更好的方法来解决问题,但这可能有助于说明为什么您获得了意想不到的结果。无论如何,我希望这会有所帮助。