You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何R语言terra包中SpatRast使用&索引时结果不符合预期?

terra与raster包逻辑索引行为差异的原因

代码复现

# terra包示例
r1 <- terra::rast(ncols=5, nrows=5, xmin=0, xmax=5, ymin=0, ymax=5)
r1[] <- 1:25
s1 <- r1
r1[s1>9 & r1>9]
#[1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

# raster包示例
r2 <- raster::raster(ncols=5, nrows=5, xmn=0, xmx=5, ymn=0, ymx=5)
r2[] <- 1:25
s2 <- r2
r2[s2>9 & r2>9]
#[1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

差异原因

两者的核心差异来自两个包对栅格对象索引逻辑的设计不同:

  • raster包:当使用逻辑表达式(返回raster对象)作为索引时,会自动将该逻辑栅格转换为逻辑向量,遵循常规R的向量索引规则——仅提取逻辑值为TRUE对应的元素,因此返回符合条件的10-25。
  • terra包:当使用逻辑型SpatRast对象作为索引时,其设计逻辑是选择该索引栅格中所有非NA的单元格。而逻辑栅格中的FALSE并不等同于NA,因此所有单元格都会被选中,最终返回全部元素1-25。

terra包的正确写法

如果要在terra中实现和raster相同的提取效果,需要先将逻辑栅格转换为向量,再进行索引:

# 方式1:先提取值再索引
values(r1)[values(s1>9 & r1>9)]
# 方式2:直接用向量索引栅格
r1[values(s1>9 & r1>9)]

内容的提问来源于stack exchange,提问作者TVolt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 22:10:29