我在两个文件夹MEANfiles
和EAN
中有数千个文件(作为矩阵)。这些文件具有相同的尺寸
我想简单地总结每两个文件并创建第三个文件
File1 (first folder)+ file2(corresponding file from the second folder)=file3
代码工作正常,但我注意到循环计算了一些文件,然后将它们放在输出中,然后使用其他文件计算相同的文件并将所有文件放在输出中,并且这样做....循环不会通过文件和计算获取一个文件,但每次计算它都会返回以前的文件。如果我有一些文件,但有数千个文件这是一个问题,这很好!
代码:
dir1<- list.files("/donne/MEANfiles", "*.bin", full.names = TRUE)
results <- list()
for (files in seq_along(dir1)){
for (i in seq_along(results)){
}
答案 0 :(得分:3)
一种方法是同时循环两个文件名列表,例如使用mapply
,使用raster
读取两个栅格,将它们相加,然后再将它们吐出来:
library(raster)
mapply(function(x, y) {
z <- raster(x) + raster(y)
writeRaster(z, file.path(outputDir, basename(x)), format='HFA')
}, dir1, dir2)
在这里,我使用了format='HFA'
,它对应于Erdas Imagine(我假设这是你开始使用.img扩展时的光栅格式)。根据需要更改格式(请参阅?writeFormats
)。
我不确定,但是创建两个文件列表的RasterStack
个子集可能会更快,将它们相加并写出结果堆栈的和栅格。有点像...
library(raster)
i <- rep(1:10, length.out=length(dir1)) # edit 10 to reflect your memory capacity
dir1 <- split(dir1, i)
dir2 <- split(dir2, i)
mapply(function(x, y) {
z <- stack(x) + stack(y)
writeRaster(z, file.path(outputDir, basename(x)), format='HFA', bylayer=TRUE)
}, dir1, dir2)