10

在迭代集合的索引值时,以下代码在 SO 上很常见:

for (i in 1:length(x)) {
  # ...
}

当集合为空时,代码会出现异常行为,因为1:length(x)become1:0给出i了值10

iterate <- function(x) {
    for (i in 1:length(x)) {
      cat('x[[', i, ']] is', x[[i]], '\n')
    }
}

> iterate(c(1,2,3))
x[[ 1 ]] is 1 
x[[ 2 ]] is 2 
x[[ 3 ]] is 3 

> iterate(c())
x[[ 1 ]] is  
x[[ 0 ]] is

我记得看到过一个优雅的习惯用法,用于定义一个在为空时没有元素的序列,x但我不记得了。你用什么成语?

4

1 回答 1

12

当您感兴趣的对象为空时,seq或者给您一些更合理的东西。seq_along

> x <- NULL
> seq(x)
integer(0)
> seq_along(x)
integer(0)
> x <- rnorm(5)
> seq(x)
[1] 1 2 3 4 5
> seq_along(x)
[1] 1 2 3 4 5
于 2012-08-10T02:23:48.223 回答