r foreach并行“不正确的维数”

时间:2014-08-19 15:39:50

标签: r foreach parallel-processing

我想扫描一个大矩阵。这是我想要做的简写版本。如果在代码中我用%do%替换%dopar%,它运行正确,使用dopar,它会给出"不正确的维数"错误

cfun <- function(a,b) NULL
a <- foreach (j = 1:185001, .combine='cfun') %dopar% {
Xlog_sum[j]<- sum(Xlog_bool[,j])
}

感谢

1 个答案:

答案 0 :(得分:1)

假设“Xlog_sum”是一个向量而“Xlog_bool”是一个2D矩阵,则不应该得到“维数不正确”的错误。我运行了这个例子,唯一的问题是所有的结果都丢失了。使用%dopar%时不会修改“Xlog_sum”,因为并行运行时会丢失副作用。如果循环可以并行执行,那么你应该只在foreach循环中使用%dopar%,这是一个不能并行工作的foreach循环的例子,因为它取决于副作用。

对于使用%do%和%dopar%的foreach,您必须使用combine函数收集结果,如:

Xlog_sum <- foreach(j = 1:185001, .combine='c') %dopar% {
  sum(Xlog_bool[,j])
}