批量增量循环

时间:2016-07-26 14:14:56

标签: r loops raster r-raster

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

关于我的数据

我从NASA MODIS卫星下载了1000个文件。由于我的研究区域覆盖面积很大,我必须在6个区域的区域内下载数据。结果,我下载的文件列表实际上被分组了#39;一共6个(尽管只是出现在资源管理器中的文件列表中)。

我在R中编写了一些简单的for循环来进行一些初始处理(在下面的例子中,这是重新采样tile,然后使用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,但这并不能解决我的问题。

这是批次&#39;在R中使用for循环可以进行处理吗?非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

首先请注意,使用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)
}