说我有一个载体,例如,x <- 1:10,然后x[0]返回相同类作为一个零长度矢量x,在这里integer(0).
我想知道这个选择背后是否有原因,而不是抛出一个错误,或者NA像x[11]那样回来?此外,如果您能想到x[0]返回integer(0)有用的情况,感谢您将其包含在您的答案中.
Das*_*son 10
如图所示 ?"["
允许NA和零值:忽略包含零的索引矩阵的行,而包含NA的行在结果中产生NA.
因此,0的索引会被忽略.我们可以在下面看到这一点
x <- 1:10
x[c(1, 3, 0, 5, 0)]
#[1] 1 3 5
Run Code Online (Sandbox Code Playgroud)
因此,如果我们给它的唯一索引是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)))
Run Code Online (Sandbox Code Playgroud)
所以在某种程度上我的x[FALSE]反驳是正确的,因为它占据了向量中不存在的零点的位置。
好吧,我刚刚吐出的这个巴隆加是真的,直到有人提出异议并将其撕毁为止。
PS 本指南第 19 页 (链接) 指出integer() and integer(0) are empty integer.
相关SO帖子: 如何捕获整数(0)?