【问题标题】:use of brick (raster) within doParallel parallel loop in R在 R 中的 doParallel 并行循环中使用砖(光栅)
【发布时间】:2020-01-10 11:11:51
【问题描述】:

我想在 R 中的并行循环内读取单独的 tif 文件。我加载了光栅包并且砖在循环外工作,但在循环内尝试使用砖失败:

library(foreach)
library(doParallel)
library(raster)

cores=detectCores()
cl <- makeCluster(cores[1]) 
registerDoParallel(cl)

tiffile="../ESACCI-LC-L4-LC10-Map-20m-P1Y-2016-v1.0.tif"
print("step1")
bdata=brick(tiffile)

print("step2")
result<-foreach(j=1:5,.combine=rbind) %dopar% {
bpar=brick(tiffile)
}

输出:

[1] "step1"
[1] "step2"
Error in { : task 1 failed - "could not find function "brick""
Calls: %dopar% -> <Anonymous>

【问题讨论】:

    标签: r r-raster doparallel


    【解决方案1】:

    foreach 命令会启动未加载光栅包的单独环境,因此您需要在调用 brick 时提供完整的命名空间,如下所示...

    library(foreach)
    library(doParallel)
    library(raster)
    
    cores=detectCores()
    cl <- makeCluster(cores[1]) 
    registerDoParallel(cl)
    
    tiffile="../ESACCI-LC-L4-LC10-Map-20m-P1Y-2016-v1.0.tif"
    print("step1")
    bdata=brick(tiffile)
    
    print("step2")
    result<-foreach(j=1:5,.combine=rbind) %dopar% {
        bpar=raster::brick(tiffile)
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      相关资源
      最近更新 更多