【问题标题】:In R why does all(numeric(0)) give TRUE whereas any(numeric(0)) gives FALSE?在 R 中,为什么 all(numeric(0)) 给出 TRUE 而 any(numeric(0)) 给出 FALSE?
【发布时间】:2018-05-24 03:25:10
【问题描述】:

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

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

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

【问题讨论】:

  • 请参阅?all 中的“备注”部分了解有关此内容的一些信息。
  • @Marius 两个文档都声称零长度向量被忽略。所以这不是AFAIAC的解释。
  • @Marius 我实际上询问了 all(numeric(0)) 这在 ?all 中没有提到。 R 对 numeric(0) 和logical(0) 的看法不同吗?
  • numeric(0) 首先会被强制转换为logical(0),所以它们应该被同等对待。我还应该提到,我不打算将 ?all 中的详细信息视为问题的答案,只是一个起点 - 因此作为评论发布。
  • ?all 声明“返回的值为 TRUE[...](包括如果没有值)”。 ?any 声明“返回的值是 [...] FALSE [...](包括如果没有值)。”这就是函数的定义方式。至于为什么他们是这样定义的。我假设它可以确保 R 中的其他操作按预期工作。

标签: r


【解决方案1】:

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

文档?all 指出(仅显示相关部分):

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

对于?any,同样只是相关部分:

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

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

【讨论】:

    【解决方案2】:

    minmax 也会出现类似的现象:

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

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

    lattice theory 的意义上,空集的连接(最小上界)唯一合理的定义是作为格子的底部元素,而相遇(最大下界)是格子的顶部格子。在扩展实数的情况下,这些顶部和底部元素是Inf-Inf

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      相关资源
      最近更新 更多