r - 在 R 中的 foreach 循环中使用栅格堆栈和 doParallel

标签 r foreach raster

我想对 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/

相关文章:

在 R Shiny 应用程序中重用输入

java - 如何在jsp中显示3个数组列表?

php - foreach 语句和设置在循环外部使用的变量

r - 如何找到逐像素标准偏差?

R光栅包将图像分割成倍数

r - 将栅格聚合到更粗糙的现有网格——加权贡献像素

r - POSIXct 日期对象由 apply() 转换

r - 在 tidymodels `predict()` dplyr::select( "Error in ` t 不存在的子集列中运行 )`: Can' 时出错。”

r - 如何从ggtheme中删除框架

php - 如何让 Foreach 循环重复 10 次?