使用terra包weighted.mean返回空栅格且报错问题求助
问题原因与修正方案
核心问题
你的代码出现错误和空栅格,主要是两个原因:
- 错误使用
:生成小数序列:R的:运算符仅支持生成整数序列,0.00:0.56实际只输出单个值0,0.00000000:0.03338733同理也只输出0。这导致r1、r2所有像元值全为0,计算加权平均时权重和为0,触发无效值/空栅格。 - 栅格值长度不匹配:你的栅格需要600个值(10×10×6),但错误的序列仅提供1个值,terra会循环填充,但全0的权重必然导致计算失败。
修正代码
用seq()生成精准匹配长度的小数序列,替代::
library(terra) # terra 1.7.78 # 生成对应600个像元的小数序列 r1 <- rast(ncols=10, nrows=10, nlyr=6, vals=seq(0.00, 0.56, length.out = 600)) r2 <- rast(ncols=10, nrows=10, nlyr=6, vals=seq(0.00000000, 0.03338733, length.out = 600)) # 计算加权平均 r3 <- weighted.mean(r1, r2, na.rm=TRUE) # 查看结果 print(r3)
补充说明
terra的weighted.mean函数,当x和w均为多层栅格时,会对每个像元,用对应图层的x值和w值计算加权平均(公式:sum(x[[i]]*w[[i]])/sum(w[[i]]))。如果你的需求是用单个权重图层给所有x图层加权,只需将w设为单图层栅格即可。
内容的提问来源于stack exchange,提问作者jmutua
相关产品推荐
相关产品推荐

