对于相同的比较,all() 函数给出 TRUE 但 any() 给出 FALSE

all() function gives TRUE but any() gives FALSE for same comparison

any() 函数描述为“Given a set of logical vectors, is at least one of the values true?" while the all() function says "Given a set of logical vectors, are all of the values true?”这意味着 all() 中的 returns TRUE 也应该 any() 中的 return 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() returns FALSE 会发生这种情况?此外,问题与 is.null() 无关,因为 NULL == 1 给出 logical(0) 同样的悖论情况适用于:

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

这是重复的

发现 问同样的悖论。我无法标记为重复(或不知道如何)。

根据文档,any 忽略零长度对象:

...
zero or more logical vectors. Other objects of zero length are ignored, and the rest are coerced to logical ignoring any class.

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

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

length(logical(0))
[1] 0

这类似于:

any()
[1] FALSE

现在,为什么 all 有效?

The value returned is TRUE if all of the values in x are TRUE (including if there are no values), and FALSE if at least one of the values in x is FALSE. Otherwise the value is NA (which can only occur if na.rm = FALSE and ... contains no FALSE values and at least one NA value).

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

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

The value returned is TRUE if at least one of the values in x is TRUE, and FALSE if all of the values in x are FALSE (including if there are no values)

我认为主要的一点是,由于一个人正在将 NULL 与其他东西进行比较,因此返回的逻辑向量为空(即长度为零),这会影响 any 处理结果的方式/all.