我希望有人可以帮助我使用我正在使用的循环功能。我曾尝试过广泛搜索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循环可以进行处理吗?非常感谢您的帮助。
答案 0 :(得分:0)
首先请注意,使用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)
}