为什么将 %dopar% 与 foreach 一起使用会导致 R 无法识别包?
Why is using %dopar% with foreach causing R to not recognize package?
我试图通过将 doParallel 包与 foreach 包一起使用,使我的代码在 R 上并行运行 运行。我还使用 sf 包来操作 shp 文件。我确保我的所有代码仅使用 %do% 在 foreach 循环中工作,因此如果出现错误我可以更好地追踪它。我的代码使用 foreach 和 %do% 运行良好,但是当我更改它时,do %dopar% R 会继续给我以下错误:
Error in { : task 1 failed - "could not find function "st_geometry_type""
尽管我清楚地在 R 脚本的顶部使用了 require(sf)。我做了一个小函数,如果语句为真,它只打印出 "check" 来复制错误。
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""
然而,当我将 %dopar% 替换为 %do% 时,它会打印出所有预期的 "check" 消息。
这是 R 中的错误还是我遗漏了什么?我尝试重新安装我的软件包,但这似乎没有任何影响,因为我继续遇到同样的错误。任何帮助将不胜感激。
您需要在 foreach
函数
中包含您将在循环内使用的包
foreach(i=1:10,.packages="sf") %dopar% {
if (st_geometry_type(sfObject[i,]) == "LINESTRING")
{
print("check")
}
}
我试图通过将 doParallel 包与 foreach 包一起使用,使我的代码在 R 上并行运行 运行。我还使用 sf 包来操作 shp 文件。我确保我的所有代码仅使用 %do% 在 foreach 循环中工作,因此如果出现错误我可以更好地追踪它。我的代码使用 foreach 和 %do% 运行良好,但是当我更改它时,do %dopar% R 会继续给我以下错误:
Error in { : task 1 failed - "could not find function "st_geometry_type""
尽管我清楚地在 R 脚本的顶部使用了 require(sf)。我做了一个小函数,如果语句为真,它只打印出 "check" 来复制错误。
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""
然而,当我将 %dopar% 替换为 %do% 时,它会打印出所有预期的 "check" 消息。 这是 R 中的错误还是我遗漏了什么?我尝试重新安装我的软件包,但这似乎没有任何影响,因为我继续遇到同样的错误。任何帮助将不胜感激。
您需要在 foreach
函数
foreach(i=1:10,.packages="sf") %dopar% {
if (st_geometry_type(sfObject[i,]) == "LINESTRING")
{
print("check")
}
}