R 中栅格堆栈的分位数函数似乎 return 不正确的值

quantile function for a raster stack in R seems to return incorrect values

我正在尝试使用 raster::quantile 计算 R 中栅格堆栈的分位数。这适用于单个栅格,但将函数应用于栅格堆栈,其中栅格不具有相同的 NA 像元会导致不正确的分位数值。

这是一个可重现的问题示例:

library(raster)
#> Loading required package: sp

#create raster stack
r <-raster(system.file("external/test.grd", package="raster"))
r1 <- setValues(r, sample(100:2000, ncell(r), replace = TRUE))
s <- stack(r, r1)

plot(s)

#quantiles of raster stack
quantile(s)
#>              0%      25%       50%       75%     100%
#> test.1 138.7071 293.9575  371.9001  501.0102 1736.058
#> test.2 100.0000 596.0000 1062.0000 1530.0000 2000.000

#quantiles of each raster in the stack
quantile(s[[1]])
#>        0%       25%       50%       75%      100% 
#>  138.7071  293.9575  371.9001  501.0102 1736.0580

quantile(s[[2]])
#>   0%  25%  50%  75% 100% 
#>  100  591 1071 1530 2000

如您所见,与直接在该栅格上使用 quantile 函数相比,使用栅格堆栈计算的 25% 和 50% 分位数对于堆栈中的第二个栅格是不同的。请注意,如果两个栅格具有相同的 NA 值,则不会发生此问题,例如

quantile(stack(r1, sqrt(r1)))
#>        0%       25%        50%        75%       100%
#> test  100 585.00000 1045.50000 1537.00000 2000.00000
#> layer  10  24.18677   32.33419   39.20459   44.72136

quantile(r1)
#>     0%    25%    50%    75%   100% 
#>  100.0  585.0 1045.5 1537.0 2000.0

quantile(sqrt(r1))
#>       0%      25%      50%      75%     100% 
#> 10.00000 24.18677 32.33419 39.20459 44.72136

在您使用的 CRAN 版本中,如果单元格在一层中为 NA,则它在所有层中都设置为 NA。我同意这不是预期的,我已经在 3.5-4 版(目前是开发版)中修复了它。

quantile(s)
#             0%      25%       50%       75%     100%
#test.1 138.7071 293.9575  371.9001  501.0102 1736.058
#test.2 100.0000 601.0000 1061.5000 1542.0000 2000.000