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

Mok*_*ksh 12 r

代码是这样的

x <- 1:5
x[NA]
Run Code Online (Sandbox Code Playgroud)

为什么会产生5个NAs?

Ken*_*HBS 13

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

索引矩阵时如何解释NA?

其中一个链接, 通过@alexis_laz提供,我发现如何了非常良好的结构解释TRUE,FALSENA索引矩阵时解释:

Logicalindices指出R要包含或排除的元素.

你有三个选择:TRUE,FALSENA

它们用于表明是否应包括在该位置表示的指数.换一种说法:

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
Run Code Online (Sandbox Code Playgroud)

例如:

x <- 1:6
x[ c(TRUE, FALSE, TRUE, NA, TRUE, FALSE)]
# [1]  1  3 NA  5
Run Code Online (Sandbox Code Playgroud)

一个重要的细节是隔离NA值的默认存储模式是逻辑(尝试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
Run Code Online (Sandbox Code Playgroud)

请回忆上一节中有关存储模式的详细信息.如果键入x[NA_integer_],则会发现不同的结果.

  • 它不会添加任何信息.问题是等待答案,我把评论中提供的信息放在一起 (4认同)
  • 在alexis_laz提供的第二个链接中,这增加了哪些新信息? (3认同)