用< -0初始化向量

时间:2016-04-12 02:27:33

标签: r

在一些教程代码中,写成:

## Results vector
results <- numeric()

## Initialize start and end indices
start <- end <- 0

for(index in seq_along(vectors)) {
  values <- vectors[[index]]
  size <- length(values)

  if(size > 0) {
    start <- end + 1
    end <- start + size - 1
    results[start:end] <- values
  }
}

为什么这有必要?为什么编码器不能`start&lt; - end&lt; - numeric()?

1 个答案:

答案 0 :(得分:4)

tl; dr numeric()0不同,它会生成长度为零的数字向量。为什么不试试看看会发生什么?

numeric()相当于numeric(0),它会产生长度为零的(空)数字向量,而numeric(1)会产生长度 - 1 用零填充的数字向量,即

identical(numeric(1),0)

TRUE。在我看来,x <- 0(很多!)比x <- numeric(1)更清晰。

至于为什么startend需要初始化为零:

  • start
  • 如果end初始化为numeric()而非0,那么当我们首次使用其值时会发生什么?我们第一次执行size>0
start <- end + 1

如果endnumeric(0),那么start也是numeric(0)我无法准确解释为什么此操作的结果是这样定义,但来自?Arithmetic

  

二元运算符返回包含元素操作元素结果的向量。如果涉及零长度向量,则结果的长度为零。

然后

end <- start + size - 1

也会产生numeric(0)

results[start:end]

将给出

 Error in start:end : argument of length 0