n 个栅格层的堆栈{栅格}

stack{raster} of n Raster Layers

我有一个关于 stack() 栅格图层的问题。

通常我 stack() 这样的光栅图层:

stack(RasterLayer1,RasterLayer2,RasterLayer3) # e.g. for 3 Layers

我的问题是,如何在不输入每个光栅图层的情况下 stack() 光栅图层?

例如:n是栅格图层的数量(例如12),全部命名为band

我创建了 n-Raster 个层,现在我想堆叠所有层而无需输入 n 次光栅层名称。所以不用输入:

stack(band1,band2,band3,band4,band5,band6,band7,band8,band9,band10,band11,band12)

我想通过 stack(band[n]) 缩短它,但这不起作用。

如果我创建了所有波段的列表,我无法堆叠该列表,因为它们不会出现在我的工作目录中,因为我刚刚创建了它们。

有人能帮帮我吗?

我建议不要将它们保存在单独的变量下,例如 band1、band2...,而是将它们存储在列表中。举个例子:

#Create empty rasters
ras1<- raster()
ras2<- raster()

#Initialise and append to list
list_ras <- list()
list_ras[[1]] <- ras1
list_ras[[2]] <- ras2

#Stack single bands
ras_stack <- stack(list_ras[[1]], list_ras[[2]])

#Stack all bands
ras_stack <- stack(list_ras)

这是使用 mget 的另一种方法:

# Generate some data
library(raster)
r <- raster()
r[] <- runif(ncell(r))
for (i in 1:10) assign(paste0("r", i), r)

# create a stack      
stack(mget(ls(pattern = "^r.+")))

如果您的数据在目录中,您可以使用搜索模式(例如:*.tif、*.grd 等)并将其存储在变量中。

bands <- list.files(path=".",pattern="*.tif",full.names=TRUE,recursive=TRUE)

现在假设您的数据被称为:

band_01.tif
band_02.tif
band_03.tif
band_04.tif
band_05.tif
band_06.tif
band_07.tif

然后你可以堆叠例如:

data_stack <- stack(bands) #stack all data
data_stack <- stack(bands[1:3]) #stack 1,2 and 3 data
data_stack <- stack(bands[c(1,3,5,7)])