在R中为什么所有(数字(0))给出TRUE而任何(数字(0))给出FALSE?

时间:2018-05-24 03:25:10

标签: r

我试图生成一个索引序列,其中连续的1出现在向量中,我偶然发现了这个特殊的情况。为什么特殊,因为我不明白all()何时给出TRUE它意味着每个值都为TRUE所以any()也应该给出TRUE,这不是这里的情况。

all(numeric(0))
# [1] TRUE
any(numeric(0))
# [1] FALSE

我发现的大多数问题都涉及将数字(0)与数字进行比较以及如何避免生成数字(0)

2 个答案:

答案 0 :(得分:5)

由于我的评论有几张选票作为答案,我会在这里发布。

文档?all说明(仅显示相关部分):

  

返回的值为TRUE [...](包括没有值时)

对于?any,再次只是相关部分:

  

返回的值为[...] FALSE [...](包括没有值时)

以这种方式定义函数,以便其他操作按预期工作。特别是@bmrn指出:all(all(x), all(y)) == all(x, y)

答案 1 :(得分:2)

minmax也会发生类似的现象:

> min(numeric(0))
[1] Inf
#but
> max(numeric(0))
[1] -Inf

这两个计算触发警告,但不会触发错误。重要的问题是为什么它们返回它们返回的值。要回答这个问题,请注意,最小集的另一个名称是它的最大最低界限。一切都是一个空集的最低界,因此没有任何有限的数字是最高最低界,因此将其定义为无穷大。双重推理适用于最大值,因为它是最小上限

lattice theory的意义上,空集的联接(最小上限)的唯一合理定义是晶格的底部元素,而满足(最大下限)是顶部的格子。在扩展实数的情况下,这些顶部和底部元素是Inf-Inf

此与anyall之间的关系非常简单:all本质上是min应用于真值。它是一个满足运算符,当应用于空集时,它应该为您提供晶格的顶部,即真值晶格中的TRUE。类似地,any基本上是max应用于真值。这是一个联接运算符,当应用于空集时,它应给出晶格的底部元素FALSE