如何在光栅中加入具有焦点功能的对称padValue

时间:2017-09-24 16:42:41

标签: r matrix r-raster

我有一个非负值的栅格矩阵(每个像素都有一个高度值),并希望使用5x5移动窗口计算一些自定义高度指标,使用矩阵边缘周围的对称填充。

我在QGIS中使用pktools(空间滤波器)进行了一些基本的计算(平均值,标准偏差,最大值),这使我能够做到这一点(使用零填充,重复或对称填充)。

现在我想使用自定义函数(即高度系数,偏度和峰度)计算其他一些指标,我不能使用pktools。我一直在尝试使用focal()中的raster函数,但padValue需要是数字。有没有解决方法,所以我可以有对称的边框?我尝试了以下方法:

> f.CoH <- function(x) {sd(x)/mean(x)}
> 
> CoH <- focal(raster, w=matrix(1,nrow=5,ncol=5), fun=f.CoH, pad=TRUE,
> padValue="symmetric")

但是得到以下错误:

> Warning message: In .local(x, ...) : NAs introduced by coercion

谢谢

1 个答案:

答案 0 :(得分:1)

您可以尝试padValue = NA

您还需要修改处理NAs的功能:

f.CoH <- function(x) {sd(x, na.rm = TRUE)/mean(x, na.rm = TRUE)} 
然而,考虑到这会产生稍微不同的结果,因为对称填充&#34;,因为通过用NA填充和通过复制值获得的标准偏差和平均值将是不同的。

HTH