我想对 R 中大型栅格堆栈中的每个图层执行一系列计算,并将每个图层的结果保存为单独的栅格以供以后使用。我正在尝试使用 foreach 和 doParallel 来加快该过程。下面是基本代码,对堆栈中的每一层进行了简单的计算 (*3):
library(raster)
library(doParallel)
RasterStack<- stack(system.file("external/rlogo.grd", package="raster"))
RasterStack<-addLayer(RasterStack,RasterStack)
cl <- makeCluster(2)
registerDoParallel(cl)
RasterStack<- stack(system.file("external/rlogo.grd", package="raster"))
RasterStack<-addLayer(RasterStack,RasterStack)
foreach(rasname=iter(names(RasterStack)),packages="raster") %dopar%{
ras<-RasterStack[[rasname]]*3
save(ras,file=paste0(rasname,"_new.Rras"))
}
它基本上可以工作,但是前 N 层没有被处理,其中 N 是节点数(例如上面的 2)。我收到以下错误: { 中的错误:任务 1 失败 - “此 S4 类不可子集化”。该错误大多仅在所有其他层都已正确处理后才会发生(即,只有前 N 层不起作用,并且这通常不会阻止其他层的处理 - 尽管偶尔会阻止)。如果使用 %do% 顺序运行,所有图层都会得到正确处理。
任何人都可以解释这种行为,或提供解决方案吗?
谢谢
最佳答案
好像只是packages
前面少了一个.
。这对我有用:
foreach(rasname = iter(names(RasterStack)), .packages = "raster") %dopar% {
ras <- RasterStack[[rasname]] * 3
save(ras, file = paste0(rasname, "_new.Rras"))
}
关于r - 在 R 中的 foreach 循环中使用栅格堆栈和 doParallel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30341740/