带有两个参数的并行 foreach
Parallel foreach with two arguments
我有这个代码:
library(doParallel)
registerDoParallel(cores = 8)
result = foreach(A = c(1, 2, 3),B = c(10, 20), .combine = list) %dopar% {
A*B
}
结果
[[1]]
[1] 10
[[2]]
[1] 40
但我想要:
10、20、30、20、40、60
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
当然有更好的方法来解决这个问题,但这可能有助于说明您为什么会得到意想不到的结果。无论如何,我希望这会有所帮助。
我有这个代码:
library(doParallel)
registerDoParallel(cores = 8)
result = foreach(A = c(1, 2, 3),B = c(10, 20), .combine = list) %dopar% {
A*B
}
结果
[[1]]
[1] 10
[[2]]
[1] 40
但我想要: 10、20、30、20、40、60
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
当然有更好的方法来解决这个问题,但这可能有助于说明您为什么会得到意想不到的结果。无论如何,我希望这会有所帮助。