循环遍历两个目录,访问循环外的文件
Loop through two directories and access the files outside the loop
我想同时循环访问两个目录。两个目录都包含光栅图像,一个是初始图像,另一个是这些图像的蒙版。
我想在循环外访问它们,因为我必须做一些计算但还要保留我的文件夹结构。
循环不必相互嵌套,我想,但我如何访问循环外的文件?在外部创建一个空的 stack/raster 并用循环 stack/raster 中的值填充它似乎不是诀窍。
到目前为止我得到了这个:
library(raster)
files1 = list.files(path2, pattern = "*.tif", full.names = TRUE)
files2 = list.files(path4, pattern = "*_cmask.tif", full.names = TRUE)
f1Stack = stack()
for (f1 in files1) {
f1Stack = stack(f1)
do stuff with f1Stack
for (f2 in files2) {
f2Raster = raster(f2)
do stuff with f2Raster
}
}
编辑:
我想存储在循环内创建的光栅堆栈,以便在外部访问。 files1 包含 10 个多波段 tiff。如果我在循环外创建一个空堆栈,尝试用循环中的当前堆栈更新它,它总是只包含循环的最后一个堆栈。
您可能希望以这种方式开始:
library(raster)
files1 <- list.files(path2, pattern = "\.tif$", full.names = TRUE)
files2 <- list.files(path4, pattern = "_cmask\.tif$", full.names = TRUE)
s1 <- lapply(files1, brick)
s2 <- lapply(files2, brick)
也就是说,创建每个文件的 RasterBrick 对象列表(比 RasterStack 更有效)。你可以操纵列表中的每个对象(循环或另一个 lapply),并且你不会丢失它们。
我想同时循环访问两个目录。两个目录都包含光栅图像,一个是初始图像,另一个是这些图像的蒙版。
我想在循环外访问它们,因为我必须做一些计算但还要保留我的文件夹结构。
循环不必相互嵌套,我想,但我如何访问循环外的文件?在外部创建一个空的 stack/raster 并用循环 stack/raster 中的值填充它似乎不是诀窍。
到目前为止我得到了这个:
library(raster)
files1 = list.files(path2, pattern = "*.tif", full.names = TRUE)
files2 = list.files(path4, pattern = "*_cmask.tif", full.names = TRUE)
f1Stack = stack()
for (f1 in files1) {
f1Stack = stack(f1)
do stuff with f1Stack
for (f2 in files2) {
f2Raster = raster(f2)
do stuff with f2Raster
}
}
编辑:
我想存储在循环内创建的光栅堆栈,以便在外部访问。 files1 包含 10 个多波段 tiff。如果我在循环外创建一个空堆栈,尝试用循环中的当前堆栈更新它,它总是只包含循环的最后一个堆栈。
您可能希望以这种方式开始:
library(raster)
files1 <- list.files(path2, pattern = "\.tif$", full.names = TRUE)
files2 <- list.files(path4, pattern = "_cmask\.tif$", full.names = TRUE)
s1 <- lapply(files1, brick)
s2 <- lapply(files2, brick)
也就是说,创建每个文件的 RasterBrick 对象列表(比 RasterStack 更有效)。你可以操纵列表中的每个对象(循环或另一个 lapply),并且你不会丢失它们。