我想使用具有偶数边矩阵的terra::ocus()(例如,应用"Roberts cross"边缘检测;https://en.wikipedia.org/wiki/Roberts_cross).

但是,ocus()只接受具有奇数边的窗口. 另一方面,afal3D()文档声明为"w =window. [...] If you desire to use even sides, you can use an array, and pad the values with rows and/or columns that contain only NAs."

对2D Focus应用此"技巧"不起作用:

r <- rast(matrix(rnorm(1000),ncol=100,nrow=100))
robx <- matrix(c(NA,1,0,NA,0,1),nrow=3)
plot(focal(r,w=robx,fun="sum")

而(当然),没有NAS的3乘3矩阵工作:

sobx <- matrix(c(-1,-2,-1,0,0,0,1,2,1) / 4, nrow=3)
plot(focal(r,w=sobx,fun="sum")

是否有任何已知的解决方法?我如何才能让Focus()接受均匀的窗口(或者至少欺骗它)?

干杯.

推荐答案

您问题中的矩阵robx不符合说明中描述的要求;它是一个3x2矩阵.

matrix(c(NA, 1, 0, NA, 0, 1), nrow = 3)
#>      [,1] [,2]
#> [1,]   NA   NA
#> [2,]    1    0
#> [3,]    0    1

显然,它的一侧有偶数个条目,因此您会得到w must be odd sized个错误.

如果您给出一个3x3矩阵,其中顶行和最后一列是NA,那么您将获得所需的结果:

library(terra)
#> terra 1.7.3

r <- rast(matrix(rnorm(1000), ncol = 100, nrow = 100))

robx <- matrix(c(NA, 1, 0, NA, 0,1, NA, NA, NA), nrow = 3)

robx
#>      [,1] [,2] [,3]
#> [1,]   NA   NA   NA
#> [2,]    1    0   NA
#> [3,]    0    1   NA

不,我们可以毫无问题地运行focal次:

plot(focal(r, w = robx, fun = "sum"))

创建于2023-10-05年第reprex v2.0.2

R相关问答推荐

R:对于没有数据的缓冲区,加权平均值为0

Select 与特定列中最大值对应的数据帧行

在Julia中调用R函数

通过Plotly绘制线串几何形状的3D图

按崩溃类别分类的指数

如何在ggplot 2 geom_segment图表中将UTC转换为EET?

将一个载体的值相加,直到达到另一个载体的值

卸载安装了BRM的模型发出的警告

无法将传奇添加到cowplot多情节中

Highcharter多次钻取不起作用,使用不同方法

如何将旋转后的NetCDF转换回正常的纬度/经度网格,并使用R?

在ggplot2中更改小提琴情节的顺序

对于变量的每个值,仅 Select 包含列表中所有值的值.R

线性模型斜率在减少原始数据时提供NA

如何基于两个条件从一列中提取行

用R ggplot2求上、下三角形中两个变量的矩阵热图

正则表达式在第二个管道和第二个T之后拆分R中的列

将列表中的字符串粘贴到R中for循环内的dplyr筛选器中

如何将宽格式的患者信息数据高效地转换为患者计数的时间序列?

我已经运行了几个月的代码的`Palette()`中出现了新的gglot错误