从向量中提取时使用NA作为索引

5
在以下代码中:
x <- 1:8
x[NA] 

我原本期待得到一个TRUE或FALSE的答案,但是我得到了8个NA。我发现is.na提供了我正在寻找的TRUE/FALSE。然而,我仍然不确定为什么使用NA来划分向量会导致NA。有解释吗?
2个回答

5

来自于help("[")中的NAs in indexing部分:

当提取一个数字、逻辑或字符的NA索引时,会选择一个未知元素,并在逻辑、整数、数值、复杂或字符结果的相应元素中返回NA,并且返回列表的“NULL”。(对于原始结果,它返回00。)

所以这就是你的代码中发生的事情:

x[NA]中,你基本上执行的是与x[]相同的操作(它只是按照x中的结构返回所有元素),除了你选择了8个未知元素,并为每个元素返回NA。在R中,这被称为循环使用

正如@thelatemail在下面的评论中指出的那样,如果我们看一个例子,这可以进一步说明。

x[c(TRUE, NA, TRUE)]
# [1]  1 NA  3  4 NA  6  7 NA

上面的代码将c(TRUE, NA, TRUE)应用于x中的所有元素,其中TRUE表示“取这个值”。由于x只有8个元素,因此第三次循环在NA处截断。

1
是的。NA正在被循环利用,并且所有的NA都被返回。就像如果你做 x[c(TRUE,NA)],你会得到向量值与插入的NA - thelatemail

0

你在索引的位置使用了NA。实际上,对于你的数组,唯一有效的索引是1-8。x[NA]与x[9]具有相同的值-它是NA。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接