我试图生成一个序列的索引,其中连续的1出现在向量中,但我遇到了这个奇特的情况。为什么说是奇特的呢?因为我不明白当all()
返回TRUE时意味着每个值都是TRUE,所以any()
也应该返回TRUE,但在这里并非如此。
all(numeric(0))
# [1] TRUE
any(numeric(0))
# [1] FALSE
我发现大多数问题都涉及比较numeric(0)和数字以及如何避免生成numeric(0)
我试图生成一个序列的索引,其中连续的1出现在向量中,但我遇到了这个奇特的情况。为什么说是奇特的呢?因为我不明白当all()
返回TRUE时意味着每个值都是TRUE,所以any()
也应该返回TRUE,但在这里并非如此。
all(numeric(0))
# [1] TRUE
any(numeric(0))
# [1] FALSE
我发现大多数问题都涉及比较numeric(0)和数字以及如何避免生成numeric(0)
由于我的评论被投票为答案,我将在此发布它。
文档?all
指出(仅显示相关部分):
返回的值为TRUE[...](包括如果没有值)
而对于?any
,同样只是相关部分:
返回的值是[...]FALSE[...](包括如果没有值)
这些函数是这样定义的,以使其他操作按预期工作。 尤其是正如@bmrn所指出的:all(all(x), all(y)) == all(x, y)
。
min
和 max
中:> min(numeric(0))
[1] Inf
#but
> max(numeric(0))
[1] -Inf
Inf
和-Inf
。any
以及 all
之间的关系相当直观: all
实际上就是对真值应用了 min
。它是一个 meet 运算符,当应用于空集时应该给出格子的顶部,即在真值格子中为 TRUE
。同样地,any
基本上就是对真值应用了 max
。它是一个 join 运算符,当应用于空集时应该给出格子的底部元素,即在真值格子中为 FALSE
。
?all
中的“注”部分以获取有关此内容的一些信息。 - Marius?any
显示相同的语言。我认为我们需要查看源代码才能回答这个问题。 - Tim Biegeleisenall(numeric(0))
的情况,但在?all
中并没有提到。R是否将numeric(0)
和logical(0)
视为不同的类型? - SKRnumeric(0)
会被强制转换为logical(0)
,因此它们应该被视为相同。我还应该提到,我并不打算将?all
中的细节视为问题的答案,而只是作为一个起点 - 因此发布为评论。 - Marius?all
表示:“返回的结果为 TRUE[...](即使没有值)”。?any
表示:“返回的结果为[...] FALSE[...](即使没有值)”。这就是这两个函数的定义方式。至于它们被定义为这样的原因,我认为这样可以确保 R 中的其他操作按照预期进行。 - neilfws