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

Joe*_*ith 5 r subset na

在下面的代码中:

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

我本来期待一个TRUE或的FALSE答案,但我得到了八个NA。我发现is.na提供了我正在寻找的TRUE/ 。FALSE但是,我仍然不确定为什么NA用 中的结果对向量进行子集化NA。有什么解释吗?

Ric*_*ven 5

来自NA 的索引部分help("[")

提取时,数字、逻辑或字符NA索引会选择未知元素,因此返回NA逻辑、整数、数字、复数或字符结果的相应元素,对于列表则返回“NULL”。(它返回00原始结果。)

所以这是您的代码中发生的情况:

基本上,x[NA]您所做的操作与您所做的操作相同x[](只是返回在 中构造的所有元素x),只不过您选择了 8 个未知元素并NA为每个元素返回。NA中的每个元素都会重复使用x。在 R 中,这称为回收

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

x[c(TRUE, NA, TRUE)]
# [1]  1 NA  3  4 NA  6  7 NA
Run Code Online (Sandbox Code Playgroud)

上面的代码是c(TRUE, NA, TRUE)对 中的所有元素进行回收x,其中的TRUE意思是“取这个值”。由于 中只有 8 个元素x,因此第三个循环在 处截止NA


Sco*_*son 0

您使用 NA 代替索引。事实上,数组的唯一有效索引是 1-8。x[NA] 与 x[9] 具有相同的值 - 它是 NA。