假设我有一个向量,例如 ,x <- 1:10
然后在此处x[0]
返回与 相同类的零长度向量。x
integer(0)
我想知道该选择背后是否有原因,而不是抛出错误或NA
按原样返回x[11]
?另外,如果您能想到x[0]
退货integer(0)
很有用的情况,感谢您将其包含在您的答案中。
如所见?"["
NA 和零值是允许的:索引矩阵中包含零的行被忽略,而包含 NA 的行在结果中产生 NA。
所以 0 的索引会被忽略。我们可以在下面看到这一点
x <- 1:10
x[c(1, 3, 0, 5, 0)]
#[1] 1 3 5
因此,如果我们给它的唯一索引是 0,那么适当的响应是返回一个空向量。
因为我不是程序员,所以我对此很感兴趣,当然也不会为 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)?
由于数组索引是从 1 开始的,因此索引 0 没有任何意义。该值作为向量索引被忽略。