【发布时间】:2025-11-27 03:20:03
【问题描述】:
我正在关注swirl 教程,其中一个部分的向量 x 定义为:
> x
[1] 1.91177824 0.93941777 -0.72325856 0.26998371 NA NA
[7] -0.17709161 NA NA 1.98079386 -1.97167684 -0.32590760
[13] 0.23359408 -0.19229380 NA NA 1.21102697 NA
[19] 0.78323515 NA 0.07512655 NA 0.39457671 0.64705874
[25] NA 0.70421548 -0.59875008 NA 1.75842059 NA
[31] NA NA NA NA NA NA
[37] -0.74265585 NA -0.57353603 NA
然后当我们输入x[is.na(x)] 时,我们会得到一个包含所有NA 的向量
> x[is.na(x)]
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
为什么会这样?我的困惑是is.na(x) 本身返回一个长度为 40 的向量,向量的每个条目中包含 True 或 False,具体取决于该条目是否为 NA。为什么用 x[ ] “包装”这个向量突然变成NA 本身的子集?
【问题讨论】:
-
当您按逻辑向量索引向量时,它会返回索引为
TRUE的向量元素。你可以自己玩这个——做x <- c(1, 2, 3),然后做x[c(T, F, T)]、x[c(F, F, F)]等。 -
[]运算符选择x的子集。例如,x[1:4]返回x的前四个元素。当传递一个逻辑向量时,它会返回x中向量为TRUE的所有元素。所以x[is.na(x)]返回x的所有元素NA。相反,x[!is.na(x)]将返回x的所有非NA元素。