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)])
我有一个关于 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)])