2012-06-19 8 views
6

Quiero recorrer un rango de números desde 1:n, cuando n es la longitud del vector v en R. Normalmente, usaría la sintaxis for (i in 1:length(v)), pero esto falla cuando n == 0.¿Cómo formulo un bucle for in en R donde deseo enuclear cero veces?

¿Cuál es la forma idiomática de hacer este ciclo? En el momento en que hago la followin, pero parece un poco feo:

# This is in my standard library 
rng <- function(n)seq(from=1, to=n, length.out=n) 

# Now when I come to the for loop: 
for(i in rng(length(v))){ 
    print(paste("I ate", i, "kg of brocolli today")) 
} 

Y sí, sé que es mejor vectorize, pero hay situaciones en las que la vectorización no es posible o requeriría mucho trabajo extra que es mucho más difícil leer el código.

Respuesta

12

Sería mejor utilizar seq_along:

> v <- letters[1:3] 
> for (i in seq_along(v)) print(c(i, v[i])) 
[1] "1" "a" 
[1] "2" "b" 
[1] "3" "c" 
> 
> v <- numeric(0) 
> for (i in seq_along(v)) print(c(i, v[i])) 
+0

Gracias, esto es justo lo que estaba buscando :) – fmark

+3

Además, 'seq_len (0)' da un vector de longitud 0 (en caso de tener una variable que contiene el límite, en lugar de un vector para repetir). – cbeleites