【发布时间】:2021-05-02 23:25:23
【问题描述】:
在我一直在处理的一个包中开始发生一些非常奇怪的事情。我正在使用带有 doparallel 后端的 foreach 循环来执行重复的随机游走,并在邻接矩阵上重新启动(下面的可重现示例)。
install.packages("Matrix")
install.packages("foreach")
devtools::install_github("https://github.com/DavisWeaver/crosstalkr")
library(foreach)
m <- replicate(1000, sample(x = c(0,1), size = 1000, replace = TRUE))
w <- Matrix::Matrix(m, sparse = TRUE)
w <- Matrix::t(Matrix::t(w)/Matrix::colSums(w)) #normalize based on the column sum.
seeds <- sample(1:nrow(w), size = 32)
每次迭代都应该执行一次随机游走并重新开始,并返回一个亲和度分数的数字向量(因此矩阵输入,一维向量输出)。我尝试在每次迭代中通过更简单的任务重现此错误,但我无法做到。此设置适用于 matrix::colSums(w) 和其他一些琐碎的任务。
为第一组工作人员中的每一个返回以下错误:“
当您使用相同的并行后端运行后续 foreach 循环时,每次迭代都会按预期执行,there are no error messages!
cl <- parallel::makeCluster(4)
doParallel::registerDoParallel(cl)
n = 8
null_dist <-
foreach::foreach(i = 1:n, .errorhandling = 'pass') %dopar% {
crosstalkr::sparseRWR(w, seed_proteins = seeds, norm = FALSE)[[1]]
}
null_dist <-
foreach::foreach(i = 1:n, .errorhandling = 'pass') %dopar% {
crosstalkr::sparseRWR(w, seed_proteins = seeds, norm = FALSE)[[1]]
}
parallel::stopCluster(cl)
我不知道从这里去哪里...我猜这与我如何设置并行后端有关?任何建议将不胜感激。
【问题讨论】:
标签: r parallel.foreach doparallel