子集中的NA - 不一致的行为

时间:2014-05-01 10:43:28

标签: r

请考虑以下事项:

seq(from=10,to=30)[c(4,8)]
[1] 13 17

seq(from=10,to=30)[c(NA,8)]
[1] NA 17

seq(from=10,to=30)[c(NA,NA)]
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

对我来说,后者的结果与R处理其他两个例子的方式不一致,并且让我付出了相当不愉快的调试痛苦。

这可能被认为是一个错误吗?

1 个答案:

答案 0 :(得分:2)

不确定它是否是一个错误 - 我怀疑这取决于你的观点,但它是索引如何工作的一个微妙之处。快速解决方案是将您的第三个示例更改为:

seq(from=10,to=30)[as.numeric(c(NA,NA))]

原因是c(NA,NA)是逻辑向量,因此使用逻辑子集(其涉及回收向量),而具有至少一个非NA使得向量被提升为整数向量。同样,这可以实现为:

seq(from=10,to=30)[c(NA_integer_,NA_integer_)]

如果您不熟悉索引的详细信息,请参阅?'['