【问题标题】:Why does x[NA] yield an NA vector the same length as x?为什么 x[NA] 会产生与 x 长度相同的 NA 向量?
【发布时间】:2016-07-07 07:53:48
【问题描述】:

代码是这样的

x <- 1:5
x[NA]

为什么会产生 5 个 NA?

【问题讨论】:

  • 好问题。尝试通过查看 x[TRUE]x[FALSE]class(NA)x[NA_integer_] 返回的内容来回答自己。
  • x[c(NA,TRUE)] 可能也很有启发性,因为它明确显示了向量循环使用NA 和非NA 值。
  • 查看类似帖子 herehere
  • 为什么要赏金?

标签: r


【解决方案1】:

这个问题的答案有两个方面:

索引矩阵时如何解释 NA?

在@alexis_laz 提供的one of the links 中,我找到了一个非常结构化的解释,说明在索引矩阵时如何解释TRUEFALSENA

Logical 索引告诉R 要包含或排除哪些元素。

您有三个选项:TRUEFALSENA

它们用于指示是否应包含在该位置表示的索引。换句话说:

TRUE  == "Include the elment at this index"
FALSE == "Do not include the element at this index"
NA    == "Return NA instead of this index" #  loosely speaking

例如:

x <- 1:6
x[ c(TRUE, FALSE, TRUE, NA, TRUE, FALSE)]
# [1]  1  3 NA  5

一个重要的细节是隔离NA 值的默认存储模式是合乎逻辑的(尝试typeof(NA))。您可以使用NA_integer_NA_real_(双)、NA_complex_NA_character_来选择NA的存储模式。

为什么是 5 个 NA 而不仅仅是 1 个?

当索引的长度小于向量x 的长度时,索引将重新开始索引x 中尚未索引的值。换句话说,R 会自动“回收”索引:

(...) 但是,标准回收规则适用。所以在前面的例子中,如果我们删除最后一个FALSE,则索引向量被回收,索引的第一个元素是TRUE,因此现在包含x的第6个元素

x <- 1:6
x[c(TRUE, FALSE, TRUE, NA, TRUE)]
#  [1]  1  3 NA  5  6

回忆上一节中有关存储模式的详细信息。如果你输入x[NA_integer_],那么你会发现不同的结果。

【讨论】:

  • 这为 alexis_laz 提供的第二个链接中的答案添加了哪些新信息?
  • 它不添加任何信息。这个问题正在等待答案,我把 cmets 中提供的信息放在一起
猜你喜欢
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 2021-06-30
  • 2012-05-23
  • 2017-11-19
相关资源
最近更新 更多