代码是这样的
x <- 1:5
x[NA]
为什么会产生 5 个 NA?
这个问题的答案有两个方面:
索引矩阵时如何解释 NA?
在@alexis_laz提供的一个链接中,我发现了一个结构很好的解释,说明在索引矩阵时如何解释TRUE
、FALSE
和NA
:
Logical
索引告诉R
要包含或排除哪些元素。您有三个选项:
TRUE
、FALSE
和NA
它们用于表明是否应包括该位置所代表的指数。换句话说:
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_]
,则会看到不同的结果。