【问题标题】:Why do NA==NULL , NULL==NULL print logical(0)?为什么 NA==NULL , NULL==NULL 打印逻辑(0)?
【发布时间】:2019-09-29 01:24:50
【问题描述】:

为什么NA==NULL 的结果是logical (0) 而不是 FALSE?

为什么NULL==NULL 的结果是logical(0) 而不是TRUE?

【问题讨论】:

  • 下面我的回答能解决你的问题吗?

标签: r


【解决方案1】:

NULL 是一个“零长度”对象,因此与NULL 的任何元素比较或操作的长度都为零:logical(0) 表示长度为零的逻辑向量。您可能会发现 identical() 很有用:identical(NULL,NULL) 是 TRUE,identical(NULL,NA) 是 FALSE。另请参阅 ?is.null?is.na 以测试 NANULL 的特殊值。

另请参阅:Compare a value to null. Why is this true?

@Dason 指出== 进行元素比较;当您对两个不同长度的向量进行元素运算时,R 通常会“回收”较短的向量,使其长度等于较长的向量(如果长度不能均匀整除,则会发出警告),但R language definition

从 R 1.4.0 开始,任何涉及零长度向量的算术运算都具有零长度结果。

【讨论】:

  • 只是稍微补充一下答案 - 记住 == 进行元素比较是很有用的。所以如果你用它来比较两个长度为 5 的向量;你会得到一个长度为 5 的向量。
  • 是的。稍微奇怪的是,如果您比较两个不同 非零 长度的向量,较短的向量会复制到较长向量的长度。诚然,将零长度向量复制为正长度是不可能的,但这是一种极端情况,我无法明确证明其逻辑......
  • 5 + numeric(0) 返回numeric(0),但sum(5, numeric(0)) 返回5。这有意义还是这种行为不一致?当我看到你的回答时,我想起了几年前我写的this answer 出现了这个问题(见最后一段),我不知道为什么。
  • 我觉得和上面的R语言定义语句是一致的。 + 是算术运算/运算符,sum() 是函数 ... sum() 结合 它的所有元素(例如 sum(5:7,10) 是 28),而不是按元素计算。
  • "NULL is a 'zero-length' object" 也被as.numeric(NULL) OR as.character(NULL) OR as.logical(NULL)证明了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多