为什么`x [0]`返回零长度向量?

时间:2012-05-16 01:06:16

标签: arrays r

假设我有一个向量,例如x <- 1:10,那么x[0]会返回与x相同类的零长度向量,此处为integer(0)

我想知道这个选择背后是否存在原因,而不是抛出错误,或者NA作为x[11]返回?此外,如果您认为x[0]返回integer(0)有用的情况,请感谢您将其包含在您的答案中。

3 个答案:

答案 0 :(得分:10)

?"["

所示
  

允许NA和零值:包含a的索引矩阵的行   零被忽略,而包含NA的行在其中产生NA   结果

因此,0的索引会被忽略。我们可以在下面看到这个

x <- 1:10
x[c(1, 3, 0, 5, 0)]
#[1] 1 3 5

因此,如果我们给它的唯一索引是0,那么适当的响应就是返回一个空向量。

答案 1 :(得分:2)

我对它的破解,因为我不是程序员,当然也没有为R源做贡献。我想这可能是因为你需要某种占位符来说明这里发生的事情但没有任何回复。使用tablessplit之类的内容会更加明显。例如,当您创建一个值表并说该单元格为零时,您需要保持由向量中的字符串构成的单元格没有值。 x[0]==0是不合适的,因为它不是零的数值,而是没有任何值。

所以在下面的分割中我们需要一个占位符,integer(0)保存没有返回值的地方,这与0不同。注意第二个它返回numeric(0)仍然是占位符说明它是数字占位符。

with(mtcars, split(as.integer(gear), list(cyl, am, carb)))
with(mtcars, split(gear, list(cyl, am, carb)))

所以在某种程度上我的x[FALSE]反驳是真的,因为它保留了向量中不存在的零点的位置。

好吧,我刚刚喷出的这个balonga是真的,直到有人发生争执并撕下它。

本指南的PS第19页(LINK)声明integer() and integer(0) are empty integer.

相关SO帖子: How to catch integer(0)?

答案 2 :(得分:2)

由于数组索引是从1开始的,因此索引0没有意义。该值将被忽略为矢量索引。