代码就像这样
x <- 1:5
x[NA]
为什么会产生5个NAs?
答案 0 :(得分:13)
这个问题的答案有两个方面:
索引矩阵时如何解释NA?
在@alexis_laz提供的one of the links中,我找到了一个非常有条理的解释,说明了在索引矩阵时如何解释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
值的默认存储模式是逻辑的(try typeof(NA)
)。您可以使用NA
,NA_integer_
(对于双倍),NA_real_
或NA_complex_
来选择NA_character_
的存储模式。
为什么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_]
,则会发现不同的结果。