r - foreach 并行处理时出错 : "could not find function "%dopar %""

标签 r parallel-foreach

我在使用 R 中的 foreach 函数进行并行处理时遇到问题。

以下代码完美运行:

library(foreach)
library(doParallel)

city_list <- c("city1", "city2")
date_list <- c("date1", "date2")

city_date_list <- foreach(city=city_list, .combine='c') %do% {
  foreach(date = date_list, .combine='c') %do% {
  city_date <- paste(city, date)
  city_date
}
}
print(city_date_list)

[1]“城市1日期1”“城市1日期2”“城市2日期1”“城市2日期2”

但是,当我尝试从 %do% 更改为 %dopar% 时,代码开始抛出错误。 这是并行处理的更新代码

library(foreach)
library(doParallel)

city_list <- c("city1", "city2")
date_list <- c("date1", "date2")
myCluster <- makeCluster(4, type="PSOCK")
registerDoParallel(myCluster)


city_date_list <- foreach(city=city_list, .combine='c') %dopar% {
  foreach(date = date_list, .combine='c') %dopar% {
    city_date <- paste(city, date)
    city_date
  }
}

stopCluster(myCluster)

print(city_date_list)

这是生成的输出

> city_date_list <- foreach(city=city_list, .combine='c') %dopar% {
+   foreach(date = date_list, .combine='c') %dopar% {
+     city_date <- paste(city, date)
+     city_date
+   }
+ }
Error in { : task 1 failed - "could not find function "%dopar%""
> 
> stopCluster(myCluster)
> 
> print(city_date_list)
Error in print(city_date_list) : object 'city_date_list' not found

我不确定错误是什么。这些是我正在运行的 session 的详细信息。

> sessionInfo()
R version 3.4.3 (2017-11-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

locale:
[1] LC_COLLATE=English_India.1252  LC_CTYPE=English_India.1252    LC_MONETARY=English_India.1252
[4] LC_NUMERIC=C                   LC_TIME=English_India.1252    

attached base packages:
[1] parallel  stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] doParallel_1.0.11 iterators_1.0.9   foreach_1.4.4    

loaded via a namespace (and not attached):
[1] compiler_3.4.3   magrittr_1.5     tools_3.4.3      yaml_2.1.18      stringi_1.1.7    codetools_0.2-15 knitr_1.20      
[8] stringr_1.3.0   

关于如何纠正这个问题有什么想法吗?

最佳答案

嵌套 foreach 循环时,应在除一个循环之外的所有循环上使用嵌套运算符 %:%。伪代码:

foreach (...) %:%
    foreach (...) %dopar%
        ....

请参阅nesting vignette for details

关于r - foreach 并行处理时出错 : "could not find function "%dopar %"",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52125862/

相关文章:

r - 在 R 中使用 t.test() 时出错 - 'y' 观察值不够

r - 在大矩阵中计算非对角线平均值的更快方法

r - 条件概率

r - 使用 "cases"在大括号中显示线性方程组(R-markdown)

r - 如何在 R 中将 `foreach` 和 `%dopar%` 与 `R6` 类一起使用?

r - 并行for循环R

r - 将由left_join()产生的所有列前缀为原始表名

R并行: rbind parallely into separate data.帧

r - 在 R 中使用 doParallel 的 foreach 时,Windows Defender 的 CPU 使用率非常高

r - R 中的并行处理 doParallel foreach