【问题标题】:Extract values from layers in terra package从 terra 包中的图层中提取值
【发布时间】:2021-12-17 03:02:01
【问题描述】:

我有一个terra::rastn 层。我想仅使用包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 层的给定坐标处的值(或其他任何层,这只是一个示例)?

【问题讨论】:

    标签: r r-raster terra


    【解决方案1】:

    我猜你只是在寻找terrasubset() 函数。请在下面找到代表。

    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 包的帮助骗了,没有看子集!这个解决方案对我有用,谢谢
    • 不客气。很高兴我能帮上忙。我祝你工作顺利。干杯
    • 你也可以做等效的extract( rs[[ c(1,4) ]], coords )
    • @Robert Hijmans。非常感谢您的分享。
    猜你喜欢
    • 2021-11-30
    • 2017-02-07
    • 2017-03-27
    • 2021-12-02
    • 2021-04-13
    • 1970-01-01
    • 2021-12-05
    • 2021-09-27
    • 2021-05-12
    相关资源
    最近更新 更多