Arrays 为什么`x[0]`返回零长度向量?
假设我有一个向量,例如,Arrays 为什么`x[0]`返回零长度向量?,arrays,r,Arrays,R,假设我有一个向量,例如,x我的破解,因为我不是程序员,当然也不会对R源代码做出贡献。我想这可能是因为你需要某种占位符来说明这里发生了什么事情,但什么也没有返回。这在表和拆分等情况下变得更加明显。例如,当您创建一个值表并说该单元格为零时,您需要保持由向量中的字符串生成的单元格没有值。使用x[0]==0是不合适的,因为它不是零的数值,而是没有任何值 因此,在下面的拆分中,我们需要一个占位符,integer(0)保留未返回值的位置,该位置与0不同。注意,对于第二个,它返回numeric(0),它仍然是
x我的破解,因为我不是程序员,当然也不会对R源代码做出贡献。我想这可能是因为你需要某种占位符来说明这里发生了什么事情,但什么也没有返回。这在表
和拆分
等情况下变得更加明显。例如,当您创建一个值表并说该单元格为零时,您需要保持由向量中的字符串生成的单元格没有值。使用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]
反驳是正确的,因为它保留了向量中不存在的零点的位置
好吧,我刚才吐出来的巴隆加酒是真的,直到有人提出异议并把它撕下来
本指南第19页()说明integer()和integer(0)是空整数。
相关SO post:由于数组索引是基于1的,因此索引0没有意义。该值作为向量索引被忽略。如中所示?“[”
允许NA和零值:包含
零被忽略,而包含NA的行在
结果
所以索引0被忽略了
x <- 1:10
x[c(1, 3, 0, 5, 0)]
#[1] 1 3 5
x,原因相同x[错误]does@TylerRinker:表面上看,这是一个有趣的问题,因为未明确定义的x[0]
返回integer(0)
,而未明确定义的x[11]
返回NA
。此外,显式赋值x[0]@Tylerlinker,我想我理解为什么x[FALSE]
返回一个零长度向量:当使用logicals(TRUE/FALSE)进行提取时,需要提供一个与x
长度相同的向量。因此在您的示例中,FALSE
被循环使用,导致x[rep(FALSE,length(x))]
我对它返回整数(0)
并不感到惊讶。同样,x[TRUE]
将返回x
。但我看不到您在x[0]
和x[FALSE]之间建立的链接
。你能详细说明一下吗?这是基于一个索引的结果,与基于一个索引的结果相反,但这是可以理解的意外。因为你不能混合使用+ve和-ve索引,忽略0可能是正确的答案:x[0:11]
返回“[1]12345678910na`和x[-(0:5)]
返回[1]6.7.8.9.10
。但我看不出这有多大用处。我仍然觉得这无法回答为什么它不会像x[11]那样返回NA的问题。因为x[11]
确实存在,它只是缺少了。试试x[15]@Tylerlinker:我同意你的观点,但只是为了进一步讨论,如果x[0]不存在,为什么x[0]@jthetzel这不是一个很好的例子,因为assign(x[1],1)
也给出了无效的第一个参数。但是assign(“x[1]”,1)
和assign(“x[0]”,1)
都成功了。@Dason:谢谢你指出这一点。不过,出于好奇,我想知道为什么x[0]没有错误谢谢@Dason。我认为值得注意的是,您引用的句子是“矩阵和数组”部分的一部分,而不是“原子向量”,因此它没有明确记录或回答我的问题,但可能可以用于外推。无论哪种方式,尽管它可以帮助讨论,但我对“因为文档中这么说”回答;我更感兴趣的是为什么做出这个选择。其他一些回答和评论提供了一些合理的解释,解释了为什么它不应该返回NA
像x[11]
有。所以我想知道为什么开发人员没有选择抛出错误。错误会很糟糕,因为在像拆分这样的情况下,您希望它返回一些非错误的内容。:)仍然坚持我提出的这个想法,听起来似乎有道理。@Tylerlinker您知道它在拆分中使用了0索引吗?我怀疑这就是“分裂工作的内部因素”。@Dason来吧,你和我都知道我不知道。