簡體   English   中英

為什么在 foreach 中使用 %dopar% 會導致 R 無法識別 package?

[英]Why is using %dopar% with foreach causing R to not recognize package?

我試圖讓我的代碼在 R 上並行運行,方法是使用 doParallel package 和 foreach package。 我也在使用 sf package 來操作 shp 文件。 我確保我的所有代碼都在 foreach 循環中工作,只使用 %do% 所以如果有錯誤我可以更好地追蹤它。 我的代碼使用 foreach 和 %do% 運行良好,但是當我更改它時,執行 %dopar% R 會繼續給我以下錯誤:

{中的錯誤:任務 1 失敗 - “找不到 function “st_geometry_type””

即使我清楚地在 R 腳本的頂部使用了 require(sf) 。 我做了一個小的 function ,如果語句為真以復制錯誤,它只會打印出“檢查”。

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")
    }
  }
}

當我運行此代碼時,它會引發相同的錯誤:

{中的錯誤:任務 1 失敗 - “找不到 function “st_geometry_type””

但是,當我將 %dopar% 替換為 %do% 時,它會打印出所有預期的“檢查”消息。 這是 R 中的錯誤還是我遺漏了什么? 我嘗試重新安裝我的軟件包,但這似乎沒有任何影響,因為我繼續遇到同樣的錯誤。 任何幫助將不勝感激。

您需要在foreach function 的循環中包含您將使用的包

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM