【问题标题】:How to incorporate a symmetrical padValue with focal function in raster如何在栅格中将对称 padValue 与焦点函数合并
【发布时间】:2017-09-24 16:42:41
【问题描述】:

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

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

现在我想使用自定义函数计算其他一些指标(即高度系数、偏度和峰度),我不能使用 pktools。我一直在尝试在raster 中使用focal() 函数,但是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

谢谢

【问题讨论】:

    标签: r matrix r-raster


    【解决方案1】:

    你可以试试padValue = NA

    您还需要修改函数以处理 NA:

    f.CoH <- function(x) {sd(x, na.rm = TRUE)/mean(x, na.rm = TRUE)} 
    

    但是请考虑,这会产生与“对称填充”不同的结果,因为通过使用 NA 填充和复制值获得的标准偏差和平均值会有所不同。

    HTH

    【讨论】:

    • 有没有办法复制这些值呢?我更喜欢这个而不是 NA 或 0。
    • 我不知道,除非你想编程。但是,在我看来,填充 NA 比复制要好:至少,您得出的统计数据是基于真实数据的,而复制数据会引入虚假数据并将其视为真实数据。
    猜你喜欢
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 2019-03-05
    • 2017-12-26
    相关资源
    最近更新 更多