r - 为什么在 foreach 中使用 %dopar% 会导致 R 无法识别包?

标签 r rstudio doparallel parallel-foreach

我试图通过使用 doParallel 包和 foreach 包来让我的代码在 R 上并行运行。我还使用 sf 包来操作 shp 文件。我确保所有代码都在 foreach 循环中使用 %do% 工作,因此如果出现错误,我可以更好地追踪它。我的代码使用 foreach 和 %do% 工作得很好,但是当我更改它时 dopar% R 会继续给我以下错误:

Error in { : task 1 failed - "could not find function "st_geometry_type""

尽管我在 R 脚本的顶部明确使用了 require(sf)。我制作了一个小函数,如果语句为真,则仅打印出“检查”以复制错误。

require(sf)
require(doParallel)
doParallel::registerDoParallel(cores = 2)

testforeach <- function(sfObject)
{
  foreach(i=1:10) %dopar% {
    if (st_geometry_type(sfObject[i,]) == "LINESTRING")
    {
      print("check")
    }
  }
}

当我运行此代码时,它会抛出完全相同的错误:

Error in { : task 1 failed - "could not find function "st_geometry_type""

但是,当我用 %do% 替换 %dopar% 时,它会打印出所有预期的“检查”消息。 这是 R 中的错​​误还是我遗漏了什么?我尝试重新安装我的软件包,但这似乎没有任何影响,因为我继续遇到相同的错误。任何帮助将不胜感激。

最佳答案

您需要在 foreach 函数的循环内包含要使用的包

foreach(i=1:10,.packages="sf") %dopar% {
    if (st_geometry_type(sfObject[i,]) == "LINESTRING")
    {
      print("check")
    }
}

关于r - 为什么在 foreach 中使用 %dopar% 会导致 R 无法识别包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58441754/

相关文章:

行对名称中具有特定模式的列求和

r - 循环中lm()输入字符串的问题

r - 如何修复 data.frame 的列名称中的空格(删除空格、注入(inject)点)?

r - 在 block 中产生与内联代码相同数量的数字

Rmarkdown 演示幻灯片行情

r - 使用 gitbook 格式和样式创建单个独立的 html bookdown 文件

r - 对于 R 中的大迭代,foreach 循环变得不活动

r - 当时区不同时检查日期是否相等