【发布时间】:2017-08-08 12:20:22
【问题描述】:
我使用 raster::calc 计算跨不同层的每个单元格的分位数,但我不理解 na.rm = FALSE 时的行为,如下例所示。
让我们创建一个示例栅格并从随机单元格中删除 5 个值。
library(raster)
r <- raster::raster(nrow = 2, ncol = 2)
r[] <- 1:4
s <- raster::stack(r, r*2, r * 3, r * 4, r * 5)
s[]
set.seed(1)
s[][sample(1:4, 1), sample(1:5, 1)] <- NA
s[][sample(1:4, 1), sample(1:5, 1)] <- NA
s[][sample(1:4, 1), sample(1:5, 1)] <- NA
s[][sample(1:4, 1), sample(1:5, 1)] <- NA
s[][sample(1:4, 1), sample(1:5, 1)] <- NA
s[]
如果我删除 NA,下面的代码就可以工作!
fun <- function(x) {quantile(x, probs = 0.50, na.rm = TRUE)}
p <- raster::calc(s, fun)
p[]
但是,如果我想排除至少有一个 NA 的单元格,则代码不起作用!
fun <- function(x) {quantile(x, probs = 0.50, na.rm = FALSE)}
p <- raster::calc(s, fun)
我期待一个包含 4 个 NA 的向量,但上面的代码却抛出了这个错误:
Error in .calcTest(x[1:5], fun, na.rm, forcefun, forceapply) :
cannot use this function
谁能帮我理解为什么会这样?我应该怎么做才能得到我所期望的行为?
【问题讨论】: