[英]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)
如果您的數據位於目錄中,則可以使用搜索模式(例如:* .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)])
這是使用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.+")))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.