请考虑以下事项:
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处理其他两个例子的方式不一致,并且让我付出了相当不愉快的调试痛苦。
这可能被认为是一个错误吗?
答案 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_)]
如果您不熟悉索引的详细信息,请参阅?'['
。