栅格包的焦点功能不正确的局部分位数

时间:2016-08-02 15:06:23

标签: r raster quantile

我正在尝试使用栅格R包计算局部分位数。但是我无法产生明智的结果。

这是产生奇数结果的最小例子:

library(raster)

set.seed(100)
n <- 5

# create a raster object
r <- raster::raster( matrix(rnorm(n^2),n,n)) 

# create a weight matrix
W <- matrix(1,nrow=3,ncol=3)

# create a weight matrix
rLocalKDE2 <- raster::focal(r,W,fun=stats::quantile,probs=0.3)

两个光栅图像的as.matrix功能产生:

 > as.matrix(r)
      [,1]       [,2]       [,3]       [,4]      [,5]
 [1,]  1.449469 19.5963292 -2.4142891 -1.7028303 -8.851035
 [2,]  1.049408 -0.6686213 -0.3880794  0.7489177 -1.282491
 [3,] -6.028731  2.3172630  1.2115319  2.0829121 -8.260212
 [4,]  0.179009 -6.7879331  3.0286532  2.1160440 -1.006479
 [5,] 10.087954  0.5925101 -0.9240929 -1.4685703  3.899903

 > as.matrix(rLocalKDE2)
       [,1]      [,2]      [,3]      [,4] [,5]
 [1,]   NA        NA        NA        NA   NA
 [2,]   NA -6.028731 -2.414289 -8.851035   NA
 [3,]   NA -6.787933 -6.787933 -8.260212   NA
 [4,]   NA -6.787933 -6.787933 -8.260212   NA
 [5,]   NA        NA        NA        NA   NA

鉴于此,这个结果似乎很奇怪 stats::quantile(as.matrix(r)[2:4,2:4],probs=0.3)返回0.06671944。

我在OS X 10.11.6上使用光栅2.5-8从brew运行R 3.3.1。

1 个答案:

答案 0 :(得分:1)

您的函数表达式不正确,因为probs参数在函数外部定义,并作为焦点的附加参数传递并被忽略。实际上你得到了0百分位数。请参阅下面的更正版本:

library(raster)

set.seed(100)
n <- 5
r <- raster::raster( matrix(rnorm(n^2),n,n)) 
W <- matrix(1,nrow=3,ncol=3)

# create a weight matrix
k <- raster::focal(r, W, fun=function(x) stats::quantile(x,probs=0.3))

as.matrix(k)
     [,1]       [,2]       [,3]        [,4] [,5]
[1,]   NA         NA         NA          NA   NA
[2,]   NA -0.1525472 -0.1327071 -0.13270706   NA
[3,]   NA -0.1525472 -0.5046161 -0.08247059   NA
[4,]   NA -0.1525472 -0.2965709 -0.07162857   NA
[5,]   NA         NA         NA          NA   NA
>