批量递增循环
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' 处理?非常感谢您的帮助。
首先请注意,使用resample
和mosaic
几乎肯定是错误的。如果这些是图块,您应该可以使用 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)
}
我希望有人可以帮助我处理我正在使用的循环函数。我已尝试广泛搜索 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' 处理?非常感谢您的帮助。
首先请注意,使用resample
和mosaic
几乎肯定是错误的。如果这些是图块,您应该可以使用 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)
}