从 terra 包中的图层中提取值
Extract values from layers in terra package
我有一个 terra::rast
有 n
层。我想仅使用包 terra
提取某些层的值(我更喜欢使用此包而不是 raster
的答案)。看来我不知道如何在函数 terra::extract
中使用参数 layer
。这是一个最小(几乎)工作示例:
rs1 = terra::rast(nrows = 3, ncols = 4)
terra::values(rs1) = 4:15
rs2 = terra::rast(nrows = 3, ncols = 4)
terra::values(rs2) = 25:36
rs3 = terra::rast(nrows = 3, ncols = 4)
terra::values(rs3) = 97:108
rs4 = terra::rast(nrows = 3, ncols = 4)
terra::values(rs4) = 51:62
rs = c(rs1, rs2, rs3, rs4)
names(rs) = paste0("layer", 1:nlyr(rs))
coords = matrix(data = c(0, 5, 10, -54, 0, 12), byrow = FALSE, ncol = 2)
colnames(coords) = c("x", "y")
terra::extract(x = rs, y = coords)[, c("layer1", "layer4")] # Works but not elegant in terms of memory
terra::extract(x = rs, y = coords, layer = c("layer1", "layer4")) # Does not work
terra::extract(x = rs, y = coords, layer = c(1, 4)) # Does not work
此代码提供了以下错误:
Error in .local(x, y, ...) : length(layer) == nrow(y) is not TRUE
我不明白为什么层数应该等于 y
中的行数。我想它应该是 x
中的最大层数。如何专门提取第1层和第4层(或任何其他层,这只是一个例子)在给定坐标处的值?
我猜你只是在寻找 terra
的 subset()
函数。请在下面找到代表。
Reprex
library(terra)
extract(x = subset(rs, c(1,4)), y = coords)
#> layer1 layer4
#> 1 14 61
#> 2 10 57
#> 3 10 57
由 reprex package (v0.3.0)
创建于 2021-11-02
我有一个 terra::rast
有 n
层。我想仅使用包 terra
提取某些层的值(我更喜欢使用此包而不是 raster
的答案)。看来我不知道如何在函数 terra::extract
中使用参数 layer
。这是一个最小(几乎)工作示例:
rs1 = terra::rast(nrows = 3, ncols = 4)
terra::values(rs1) = 4:15
rs2 = terra::rast(nrows = 3, ncols = 4)
terra::values(rs2) = 25:36
rs3 = terra::rast(nrows = 3, ncols = 4)
terra::values(rs3) = 97:108
rs4 = terra::rast(nrows = 3, ncols = 4)
terra::values(rs4) = 51:62
rs = c(rs1, rs2, rs3, rs4)
names(rs) = paste0("layer", 1:nlyr(rs))
coords = matrix(data = c(0, 5, 10, -54, 0, 12), byrow = FALSE, ncol = 2)
colnames(coords) = c("x", "y")
terra::extract(x = rs, y = coords)[, c("layer1", "layer4")] # Works but not elegant in terms of memory
terra::extract(x = rs, y = coords, layer = c("layer1", "layer4")) # Does not work
terra::extract(x = rs, y = coords, layer = c(1, 4)) # Does not work
此代码提供了以下错误:
Error in .local(x, y, ...) : length(layer) == nrow(y) is not TRUE
我不明白为什么层数应该等于 y
中的行数。我想它应该是 x
中的最大层数。如何专门提取第1层和第4层(或任何其他层,这只是一个例子)在给定坐标处的值?
我猜你只是在寻找 terra
的 subset()
函数。请在下面找到代表。
Reprex
library(terra)
extract(x = subset(rs, c(1,4)), y = coords)
#> layer1 layer4
#> 1 14 61
#> 2 10 57
#> 3 10 57
由 reprex package (v0.3.0)
创建于 2021-11-02