r为什么 x[NA] 会产生与 x 长度相同的 NA 向量

  • 本文关键字:NA 向量
  • 更新时间 :
  • 英文 :


代码是这样的

x <- 1:5
x[NA]

为什么会产生 5 个 NA?

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

索引

矩阵时如何解释 NA?

在@alexis_laz提供的一个链接中,我发现了一个结构很好的解释,说明在索引矩阵时如何解释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_] ,则会看到不同的结果。

最新更新