为什么x [NA]产生的NA矢量长度与x相同?

时间:2016-07-07 07:53:49

标签: r

代码就像这样

x <- 1:5
x[NA]

为什么会产生5个NAs?

1 个答案:

答案 0 :(得分:13)

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

索引矩阵时如何解释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值的默认存储模式是逻辑的(try typeof(NA))。您可以使用NANA_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_],则会发现不同的结果。