13

假设我有一个向量,例如 ,x <- 1:10然后在此处x[0]返回与 相同类的零长度向量。xinteger(0)

我想知道该选择背后是否有原因,而不是抛出错误或NA按原样返回x[11]?另外,如果您能想到x[0]退货integer(0)很有用的情况,感谢您将其包含在您的答案中。

4

3 回答 3

10

如所见?"["

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

所以 0 的索引会被忽略。我们可以在下面看到这一点

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

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

于 2012-05-16T02:22:05.930 回答
2

因为我不是程序员,所以我对此很感兴趣,当然也不会为 R 源代码做出贡献。我认为这可能是因为您需要某种占位符来说明此处发生了某些事情,但没有返回任何内容。tables这对于和之类的东西变得更加明显split。例如,当您制作一个值表并说该单元格为零时,您需要保持由向量中的字符串组成的该单元格没有值。拥有它是不合适的,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]反驳是正确的,因为它在向量中占据了不存在的零点的位置。

好吧,我刚刚吐出的这个巴隆加是真的,直到有人对此提出异议并将其撕毁。

PS 本指南(链接)的第 19 页指出integer() and integer(0) are empty integer.

相关的 SO 帖子: 如何捕获整数(0)?

于 2012-05-16T02:06:24.667 回答
2

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

于 2012-05-16T02:20:19.187 回答