在以下代码中:
我原本期待得到一个TRUE或FALSE的答案,但是我得到了8个NA。我发现is.na提供了我正在寻找的TRUE/FALSE。然而,我仍然不确定为什么使用NA来划分向量会导致NA。有解释吗?
x <- 1:8
x[NA]
我原本期待得到一个TRUE或FALSE的答案,但是我得到了8个NA。我发现is.na提供了我正在寻找的TRUE/FALSE。然而,我仍然不确定为什么使用NA来划分向量会导致NA。有解释吗?
来自于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
x
中的所有元素,其中TRUE
表示“取这个值”。由于x
只有8个元素,因此第三次循环在NA
处截断。你在索引的位置使用了NA。实际上,对于你的数组,唯一有效的索引是1-8。x[NA]与x[9]具有相同的值-它是NA。
NA
正在被循环利用,并且所有的NA
都被返回。就像如果你做x[c(TRUE,NA)]
,你会得到向量值与插入的NA
。 - thelatemail