5 comparison logic r
该any()函数被描述为“给定一组逻辑向量,至少有一个值为真吗? ”,而all()函数则为“给定一组逻辑向量,所有值都为真吗?” 这意味着返回TRUEin的所有内容也all()应该返回TRUEin any()。但请看这里:
all(NULL == "Yes")
[1] TRUE
any(NULL == "Yes")
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
我知道有一个函数可以为和is.null()提供相同的结果。但这不是我在我的情况下需要使用的。我正在开发一个包含用户选择的功能。这些选择可以是预定义的单词或 NULL(如果未做出选择)。当然,我可以在内部重新评估一个单词(即“no_choice”),但是为什么会发生这种情况并返回?此外,问题并不那么重要,因为同样的悖论情况也适用于:all(is.null(NULL))any(is.null(NULL))is.null()NULLany()FALSEis.null()NULL == 1logical(0)
all(logical(0))
[1] TRUE
any(logical(0))
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
这是重复的
发现一个问题提出同样的悖论。我无法标记为重复(或不知道如何)。
从文档中,any忽略零长度对象:
...
零个或多个逻辑向量。其他长度为零的对象将被忽略,其余对象将被强制逻辑忽略任何类。
这与 有何关系NULL == 1?
如果我们将其分解,我们会看到NULL == 1返回logical(0)长度为 0 的 a。
length(logical(0))
[1] 0
Run Code Online (Sandbox Code Playgroud)
这类似于:
any()
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
现在,为什么all有效?
如果 x 中的所有值都为 TRUE(包括没有值的情况),则返回值为 TRUE;如果 x 中至少有一个值为 FALSE,则返回值为 FALSE。否则,该值为 NA(仅当 na.rm = FALSE 且 ... 不包含 FALSE 值且至少有一个 NA 值时才会发生)。
请注意如果没有值部分则包括在内。
any将其与 的文档条目中的部分进行比较:
如果 x 中的至少一个值为 TRUE,则返回值为 TRUE;如果 x 中的所有值均为 FALSE(包括没有值),则返回值为 FALSE
我认为要点是,由于与其他东西进行比较,返回的逻辑向量是空的(即长度为零),这会影响/NULL处理结果的方式。anyall