reclassify raster包中的include.lowest是什么意思?

3
考虑到开区间和闭区间的定义(不包括端点和包括端点),理解 reclassify 函数中的 right 参数是比较容易的。但是我对于 include.lowest 参数感到困惑。它提到:

表示是否应该包括 rcl 中最小值(或者当 right = FALSE 时,第二列中最大的值)等于这个值的数

在 rcl 中,最小值是第一个值,根据 right 参数的默认情况,它不会被包括在内,所以将 include.lowest 设为 true 将会包括最小值。但是关于“第二列中最大的值”部分,我不理解它指的是什么。而且“当 right = FALSE 时”的含义是什么?第二列中最大的值本来就应该被包括了。
因此,如果 rcl=c(0,1,5, 1,Inf,10),默认情况下意味着 0>x>=1 变成 5,而 x>1 变成 10。如果 include.lowest 是 true,那么 0>=x>=1 呢?
我发现很困惑的原因是 reclassify 帮助文档中给出的示例说:

所有的值 >= 0 和 <= 0.25 变成 1,等等。m <- c(0, 0.25, 1, 0.25, 0.5, 2, 0.5, 1, 3)

但是示例中的 reclassify 函数并没有使用 include.lowest,所以它应该是“所有的值 >0”而不是“所有的值 >= 0”。
编辑:我认为帮助页面非常令人困惑,考虑到答案,示例中关于帮助页面的解释是错误的。
1个回答

3
正如我在评论中所说的,rightinclude.lowest的工作方式与R基本函数cut完全相同。为了简单说明,我将在下面使用cut,使用向量1:10和断点1、5、10。
默认情况下,right = TRUE,因此所有区间都是左开右闭的,因此我们有两个区间:(1, 5](5, 10]。请注意,这些合在一起会得到另一个左开右闭区间(1, 10],其中最低的1不包括在内。include.lowest = TRUE将考虑[1, 10]并执行[1,5](5,10]。做出比较。
cut(1:10, right = TRUE, breaks = c(1, 5, 10))
# [1] <NA>   (1,5]  (1,5]  (1,5]  (1,5]  (5,10] (5,10] (5,10] (5,10] (5,10]
#Levels: (1,5] (5,10]

cut(1:10, right = TRUE, breaks = c(1, 5, 10), include.lowest = TRUE)
# [1] [1,5]  [1,5]  [1,5]  [1,5]  [1,5]  (5,10] (5,10] (5,10] (5,10] (5,10]
#Levels: [1,5] (5,10]

现在,如果我们将right = FALSE,所有的区间都将是左闭右开的:[1, 5)[5, 10)。在这种情况下,include.lowest = TRUE实际上包含了最高值。对比一下:
cut(1:10, right = FALSE, breaks = c(1, 5, 10))
# [1] [1,5)  [1,5)  [1,5)  [1,5)  [5,10) [5,10) [5,10) [5,10) [5,10) <NA>  
#Levels: [1,5) [5,10)

cut(1:10, right = FALSE, breaks = c(1, 5, 10), include.lowest = TRUE)
# [1] [1,5)  [1,5)  [1,5)  [1,5)  [5,10] [5,10] [5,10] [5,10] [5,10] [5,10]
#Levels: [1,5) [5,10]

回到 raster::reclassify

我觉得它很混乱,因为在重新分类的帮助文件中给出的示例表明

所有值 >= 0 且 <= 0.25 变为1,等等。 m <- c(0, 0.25, 1, 0.25, 0.5, 2, 0.5, 1, 3)

为什么?使用上述的m,您会得到rcl矩阵:

matrix(m, ncol = 3L, byrow = TRUE, dimnames = list(NULL, c("from", "to", value)))
#     from   to value
#[1,] 0.00 0.25     1
#[2,] 0.25 0.50     2
#[3,] 0.50 1.00     3

使用 right = TRUEinclude.lowest = FALSE(默认行为),您会得到:

(0.00, 0,25]   --->   1
(0.25, 0.50]   --->   2
(0.50, 1.00]   --->   3

使用 right = TRUEinclude.lowest = TRUE,您会得到

[0.00, 0,25]   --->   1
(0.25, 0.50]   --->   2
(0.50, 1.00]   --->   3

如果将 right 设置为 true,则不应包括 0。"所有值 >=0" - Herman Toothrot
你需要更改你的答案,因为它没有解决重新分类帮助页面的不一致性问题。 - Herman Toothrot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接