【问题标题】:all() function gives TRUE but any() gives FALSE for same comparisonall() 函数给出 TRUE 但 any() 给出 FALSE 以进行相同的比较
【发布时间】:2021-11-10 09:34:51
【问题描述】:

any() 函数用“Given a set of logical vectors, is at least one of the values true?”描述,而all() 函数用“Given a set of logical vectors, are all of the values true?”描述这意味着在all() 中返回TRUE 的所有内容也应该在any() 中返回TRUE。但请看这里:

all(NULL == "Yes")
[1] TRUE
any(NULL == "Yes")
[1] FALSE

我知道is.null() 函数可以为all(is.null(NULL))any(is.null(NULL)) 提供相同的结果。但是is.null() 不是我需要使用的。我正在开发一个包含用户选择的功能。这些选择可以是预定义的单词或 NULL(如果没有做出选择)。当然,我可以在内部将 NULL 重估为一个单词(即“no_choice”),但是为什么any() 返回FALSE 会发生这种情况?此外,关于is.null() 的问题并不多,因为NULL == 1 给出了logical(0) 同样的悖论情况:

all(logical(0))
[1] TRUE
any(logical(0))
[1] FALSE

这是重复的

发现了一个question 问同样的悖论。我不能标记为重复(或不知道如何)。

【问题讨论】:

    标签: r logic comparison


    【解决方案1】:

    从文档中,any 忽略零长度对象:

    ...
    零个或多个逻辑向量。其他零长度的对象被忽略,其余的被强制逻辑忽略任何类。

    这和NULL == 1有什么关系?

    如果我们将其分解,我们会看到 NULL == 1 返回一个长度为 0 的 logical(0)

    length(logical(0))
    [1] 0
    
    

    这类似于:

    any()
    [1] FALSE
    

    现在,为什么all 有效?

    如果 x 中的所有值都为 TRUE(包括没有值),则返回值为 TRUE,如果 x 中至少有一个值为 FALSE,则返回值为 FALSE。否则该值为 NA(仅当 na.rm = FALSE 且 ... 不包含 FALSE 值且至少有一个 NA 值时才会出现)。

    注意如果没有值则包括部分。

    将此与any 的文档条目中的部分进行比较:

    如果 x 中至少有一个值为 TRUE,则返回值为 TRUE,如果 x 中的所有值都为 FALSE(包括没有值时),则返回 FALSE

    我认为重点是,由于将NULL 与其他内容进行比较,返回的逻辑向量为空(即长度为零),这会影响any/all 处理结果的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      相关资源
      最近更新 更多