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

物种分布模型采样背景点时sample.int报错概率向量含NA如何解决

错误原因

报错Error in sample.int(length(x), size, replace, prob) : NA in probability vector的核心原因是传入sample()函数的概率向量存在NA值。你当前的逻辑仅过滤了第一层预测变量的非NA像元,但没有同步校验核密度栅格dens.ras2在这些像元位置的值是否有效,dens.ras2重采样后和预测变量栅格的有效像元范围不完全重合,导致部分位置的概率值为NA。

解决方法

你需要先提取预测变量和核密度栅格共同有效的像元位置,再基于这些位置的核密度值作为概率采样背景点,修正后的代码如下:

presences <- which(values(occur.chile) == 1)
pres.locs <- coordinates(occur.chile)[presences, ]
dens <- kde2d(pres.locs[,1], pres.locs[,2], n = c(nrow(occur.chile), ncol(occur.chile)))
dens.ras <- raster(dens)
dens.ras2 <- resample(dens.ras, predictors)

# 计算两类栅格的公共有效像元位置
pred_valid <- !is.na(values(subset(predictors, 1)))
dens_valid <- !is.na(values(dens.ras2))
common_valid <- which(pred_valid & dens_valid)
# 提取对应位置的核密度值作为采样概率
prob_vals <- values(dens.ras2)[common_valid]

# 采样背景点,若有效像元不足10000可开启replace=TRUE参数
bg <- xyFromCell(dens.ras2, sample(common_valid, 10000, prob = prob_vals, replace = FALSE))
额外注意事项
  • 如果公共有效像元的数量少于你要采样的10000个,会抛出cannot take a sample larger than the population when 'replace = FALSE'的报错,此时可以把replace参数改为TRUE,允许重复采样
  • 可以先运行length(common_valid)查看有效像元总数,根据实际数值调整采样的背景点数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:24:05