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

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

10
задан Dason 16 March 2013 в 21:58
поделиться