如何从 terra 包中提取 SpatRasterDataset 的子集?
How to subset a SpatRasterDataset from the terra package?
我正在尝试使用 R 中的 terra 包从 SpatRasterDataset select 多个栅格。但是,当我尝试一次 select x 个栅格时,名称仅显示前 x 个栅格名称,无论我尝试使用哪些栅格 select。选择单个光栅似乎工作正常,尽管给它的名称不存在。
那么我如何正确地子集 SpatRasterDataset 以保持与栅格关联的正确名称?
可重现的例子:
# Create SpatRasterDataset
r1 <- rast(matrix(1:100, nrow=10, ncol=10))
r2 <- rast(matrix(200:101, nrow=10, ncol=10))
r3 <- rast(matrix(c(2,200), nrow=10, ncol=10))
s <- sds(r1,r2,r3)
# Name rasters
names(s) <- c("A","B","C")
names(s)
# Add to list
l <- list(s)
l[[1]]
l[[1]][1:2] # shows rasters A,B
l[[1]][2:3] # also shows rasters A,B
l[[1]][c("B","C")] # shows rasters A,B
l[[1]][3]
image(l[[1]][3]) # shows correct raster
# Subset SpatRasterDataset
s2 <- l[[1]][2:3] # select two rasters
names(s2) # names A, B
s2[1] # actually raster B
s2[2] # actually raster C
s3 <- l[[1]][3] # select one rasters
names(s3) # has some other name
s3 # has correct raster
SpatRasterDataset 的名称与 SpatRaster 的(层)名称不对应。
以你为例
library(terra)
r1 <- rast(matrix(1:100, nrow=10, ncol=10))
r2 <- rast(matrix(200:101, nrow=10, ncol=10))
r3 <- rast(matrix(c(2,200), nrow=10, ncol=10))
s <- sds(r1,r2,r3)
names(s) <- c("A","B","C")
您可以像这样子集 SpatRasterDataset s
以获得新的 SpatRasterDataset:
s[2:3]
s[3, drop=FALSE]
或者像这样得到一个SpatRaster
s[3]
“A”、“B”和“C”是 sub-datasets(变量)的名称,而不是 SpatRaster 的(层)名称。这些不能相同,因为每个 sub-dataset 都有一个名称,而 SpatRaster 可以有多个(层)名称。
例如,您可能有
rr1 <- c(r1, r2, r3)
names(rr1) <- c("x", "y", "z")
rr2 <- rr1[[1:2]] / 10
rr3 <- r1 * 10
ss <- sds(rr1,rr2,rr3)
names(ss) <- c("A","B","C")
ss
#class : SpatRasterDataset
#subdatasets : 3
#dimensions : 10, 10 (nrow, ncol)
#nlyr : 3, 2, 1
#resolution : 1, 1 (x, y)
#extent : 0, 10, 0, 10 (xmin, xmax, ymin, ymax)
#coord. ref. :
#source(s) : memory
#names : A, B, C
ss[1]
#class : SpatRaster
#dimensions : 10, 10, 3 (nrow, ncol, nlyr)
#resolution : 1, 1 (x, y)
#extent : 0, 10, 0, 10 (xmin, xmax, ymin, ymax)
#coord. ref. :
#sources : memory
memory
memory
#varnames : a
# b
# c
#names : x, y, z
#min values : 1, 101, 2
一个 SpatRaster 可以有一个变量名,你可以用
设置
varnames(r1) <- "A"
但这可能不是您想要的。
我正在尝试使用 R 中的 terra 包从 SpatRasterDataset select 多个栅格。但是,当我尝试一次 select x 个栅格时,名称仅显示前 x 个栅格名称,无论我尝试使用哪些栅格 select。选择单个光栅似乎工作正常,尽管给它的名称不存在。
那么我如何正确地子集 SpatRasterDataset 以保持与栅格关联的正确名称?
可重现的例子:
# Create SpatRasterDataset
r1 <- rast(matrix(1:100, nrow=10, ncol=10))
r2 <- rast(matrix(200:101, nrow=10, ncol=10))
r3 <- rast(matrix(c(2,200), nrow=10, ncol=10))
s <- sds(r1,r2,r3)
# Name rasters
names(s) <- c("A","B","C")
names(s)
# Add to list
l <- list(s)
l[[1]]
l[[1]][1:2] # shows rasters A,B
l[[1]][2:3] # also shows rasters A,B
l[[1]][c("B","C")] # shows rasters A,B
l[[1]][3]
image(l[[1]][3]) # shows correct raster
# Subset SpatRasterDataset
s2 <- l[[1]][2:3] # select two rasters
names(s2) # names A, B
s2[1] # actually raster B
s2[2] # actually raster C
s3 <- l[[1]][3] # select one rasters
names(s3) # has some other name
s3 # has correct raster
SpatRasterDataset 的名称与 SpatRaster 的(层)名称不对应。
以你为例
library(terra)
r1 <- rast(matrix(1:100, nrow=10, ncol=10))
r2 <- rast(matrix(200:101, nrow=10, ncol=10))
r3 <- rast(matrix(c(2,200), nrow=10, ncol=10))
s <- sds(r1,r2,r3)
names(s) <- c("A","B","C")
您可以像这样子集 SpatRasterDataset s
以获得新的 SpatRasterDataset:
s[2:3]
s[3, drop=FALSE]
或者像这样得到一个SpatRaster
s[3]
“A”、“B”和“C”是 sub-datasets(变量)的名称,而不是 SpatRaster 的(层)名称。这些不能相同,因为每个 sub-dataset 都有一个名称,而 SpatRaster 可以有多个(层)名称。
例如,您可能有
rr1 <- c(r1, r2, r3)
names(rr1) <- c("x", "y", "z")
rr2 <- rr1[[1:2]] / 10
rr3 <- r1 * 10
ss <- sds(rr1,rr2,rr3)
names(ss) <- c("A","B","C")
ss
#class : SpatRasterDataset
#subdatasets : 3
#dimensions : 10, 10 (nrow, ncol)
#nlyr : 3, 2, 1
#resolution : 1, 1 (x, y)
#extent : 0, 10, 0, 10 (xmin, xmax, ymin, ymax)
#coord. ref. :
#source(s) : memory
#names : A, B, C
ss[1]
#class : SpatRaster
#dimensions : 10, 10, 3 (nrow, ncol, nlyr)
#resolution : 1, 1 (x, y)
#extent : 0, 10, 0, 10 (xmin, xmax, ymin, ymax)
#coord. ref. :
#sources : memory
memory
memory
#varnames : a
# b
# c
#names : x, y, z
#min values : 1, 101, 2
一个 SpatRaster 可以有一个变量名,你可以用
设置varnames(r1) <- "A"
但这可能不是您想要的。