использование кирпича (растра) в параллели doParallel l oop в R - PullRequest
0 голосов
/ 10 января 2020

Я хочу прочитать в отдельных tif-файлах внутри параллельной l oop в R. Я загружаю растровый пакет, и кирпич работает за пределами l oop, но в пределах l oop попытка использовать кирпич не удалась:

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>

1 Ответ

1 голос
/ 10 января 2020

Команда 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)
}
...