Il codice seguente è comunemente visto su SO quando si tratta di scorrere il valori di indice di una collezione:Indice iterazione linguaggio
for (i in 1:length(x)) {
# ...
}
Il codice misbehaves quando l'insieme è vuoto perchè 1:length(x)
diventa 1:0
che dà i
la valori 1
e 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
mi ricordo di aver visto un elegante linguaggio per la definizione di una sequenza che non ha elementi quando x
è vuota ma non riesco a ricordare. Che idioma usi?
Perfetto, 'seq_along' era l'idioma che ho visto. – Sim
Ma se non hai bisogno della variabile index e vuoi semplicemente eseguire il loop sugli elementi di qualcosa, uno di lapply/sapply/vapply o qualcosa del pacchetto plyr potrebbe essere più elegante. – Spacedman
@Spacedman Molto vero ed è sicuramente qualcosa che l'OP dovrebbe tenere a mente. – Dason