我试图生成一个索引序列,其中连续的1出现在向量中,我偶然发现了这个特殊的情况。为什么特殊,因为我不明白all()
何时给出TRUE它意味着每个值都为TRUE所以any()
也应该给出TRUE,这不是这里的情况。
all(numeric(0))
# [1] TRUE
any(numeric(0))
# [1] FALSE
我发现的大多数问题都涉及将数字(0)与数字进行比较以及如何避免生成数字(0)
答案 0 :(得分:5)
由于我的评论有几张选票作为答案,我会在这里发布。
文档?all
说明(仅显示相关部分):
返回的值为TRUE [...](包括没有值时)
对于?any
,再次只是相关部分:
返回的值为[...] FALSE [...](包括没有值时)
以这种方式定义函数,以便其他操作按预期工作。特别是@bmrn指出:all(all(x), all(y)) == all(x, y)
。
答案 1 :(得分:2)
min
和max
也会发生类似的现象:
> min(numeric(0))
[1] Inf
#but
> max(numeric(0))
[1] -Inf
这两个计算触发警告,但不会触发错误。重要的问题是为什么它们返回它们返回的值。要回答这个问题,请注意,最小集的另一个名称是它的最大最低界限。一切都是一个空集的最低界,因此没有任何有限的数字是最高最低界,因此将其定义为无穷大。双重推理适用于最大值,因为它是最小上限。
在lattice theory的意义上,空集的联接(最小上限)的唯一合理定义是晶格的底部元素,而满足(最大下限)是顶部的格子。在扩展实数的情况下,这些顶部和底部元素是Inf
和-Inf
。
此与any
和all
之间的关系非常简单:all
本质上是min
应用于真值。它是一个满足运算符,当应用于空集时,它应该为您提供晶格的顶部,即真值晶格中的TRUE
。类似地,any
基本上是max
应用于真值。这是一个联接运算符,当应用于空集时,它应给出晶格的底部元素FALSE
。