Подтвердить что ты не робот

Идиома итерации индекса

Следующий код обычно рассматривается в SO, когда дело касается итерации над значениями индекса коллекции:

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

Код неверно работает, когда коллекция пуста, потому что 1:length(x) становится 1:0, который дает i значения 1 и 0.

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 пуст, но я не могу его запомнить. Какую идиому вы используете?

4b9b3361

Ответ 1

Либо 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