地板给出意想不到的结果,因此来自R的光栅包的focalWeight功能也是如此

时间:2017-07-05 22:52:56

标签: r r-raster

我使用了R focalWeight包中的raster函数来为成千上万的图像创建焦点“移动窗口”权重矩阵。在几十个图像中,该函数的行为与预期不符。我期待一个3x3矩阵,但我返回了1x3矩阵。

在深入研究问题时,我认为这是由于floor函数在内部调用。

我将在下面演示问题(我有一个名为r的栅格)。我正在运行来自.circular.weight

的代码
res(r)                               # raster resolution is 1
#[1] 1 1
rs <- res(r)
d <- 1                               # window diameter is 1
nx <- 1 + 2 * floor(d/rs[1])         # number of columns is 3
nx                                   #  this is expected
#[1] 3                                  
ny <- 1 + 2 * floor(d/rs[2])          # number of rows is 1
ny                                    # this is unexpected
#[1] 1
1 + 2 * floor(d/rs[2])
#[1] 1
2 * floor(d/rs[2])
#[1] 0
floor(d/rs[2])                         # the floor of 1 is 0
#[1] 0
d/rs[2]
#[1] 1
floor(1)                            # but the floor of 1 should be 1
#[1] 1

res(r) == 1                        # the resolution appears to be 1, 1
# [1] 1 1
res(r) == 1                        # but it isn't really
# [1]  TRUE FALSE

?floor表示此前出现过这样的意外结果。它说,“通常需要使用公差。”

我如何使用公差? 如何修复focalWeight功能?

1 个答案:

答案 0 :(得分:0)

通过使用round,我可以解决问题。 This answer告诉我如何处理floor

的意外结果
> floor(d/rs[2])
[1] 0
> floor(d/round(rs[2]))
[1] 1

这适用于我的情况,其分辨率为1.1。我不确定其他情况。