批量递增循环

Increment Loop in Batches

我希望有人可以帮助我处理我正在使用的循环函数。我已尝试广泛搜索 Google 和 Stack Overflow,但由于我不知道确切的搜索术语,我担心我会遗漏一些结果。考虑到这一点,如果这个问题已经被问到,我提前道歉,但我希望有人能指出正确的方向以寻求解决方案。

关于我的数据

我已经从 NASA 的 MODIS 卫星下载了 1000 多个文件。由于我的研究区域面积很大,我不得不下载 6 个图块区域的数据。结果,我的下载文件列表实际上是 'grouped' 6 个一组(尽管在资源管理器中只是一个文件列表)。

我在 R 中编写了一些简单的 for 循环来进行一些初始处理(在下面的示例中,这是对图块重新采样,以便可以使用 raster::mosaic 将它们拼接在一起)。此处理可以发生在在此阶段单独处理文件,因此我发现以下循环非常适合我的需求:

resampled.raster<-list()

for (l in 1:24){
  cat(l,"\n")
  resampled.raster[[l]]<-resample(rst[[l]], s, method="ngb")
}

问题

处理的下一阶段要求我将栅格以 6 个为一组进行镶嵌,然后再进行下一批 6 个。例如,如果我有一个包含 24 个文件的列表,则前 6 个需要是作为文件集合处理,然后在移动到下一个 6 之前保存(在列表中)。经过 4 次迭代(使总共 24 个文件),我需要停止循环。

我在网上搜索到的最接近的解决方案是here,但这不是我的问题的解决方案。

在 R 中使用 for 循环是否可以进行这种 'batch' 处理?非常感谢您的帮助。

首先请注意,使用resamplemosaic几乎肯定是错误的。如果这些是图块,您应该可以使用 merge 来合并它们。

需要分组的文件名肯定有一些独特之处吧?这就是你需要使用的。

获取带有文件名的向量

# ff <- list.files()

这是一个玩具示例

ff <- c('fileA1', 'fileA2', 'fileB1', 'fileB2') 

获取唯一组

code <- gsub('file', '', ff)
code <- substr(code, 1, 1)
uc <- unique(code)

遍历组

for (u in uc) {
    files <- ff[u == code]
    r <- lapply(files, raster)
    r$filename <- paste0("merged/", u, ".tif")
    m <- do.call(merge, r)
}