2012-06-19 8 views
6

Chcę pętli w zakresie numerów od , gdy n jest długość wektora v w R. Zazwyczaj użyłbym składni for (i in 1:length(v)), ale to nie powiedzie się, gdy n == 0.Jak sformułować pętlę for in w R, gdzie mogę chcieć zapętlić zero razy?

Jaki jest idiomatyczny sposób wykonywania tej pętli? W tej chwili robię followin, ale wydaje się trochę brzydki:

# 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")) 
} 

I tak, wiem, że lepiej vectorise, ale zdarzają się sytuacje, kiedy wektoryzacja nie jest możliwe lub wymaga tak dużo dodatkowej pracy, która znacznie trudniej jest odczytać kod.

Odpowiedz

12

Byłoby lepiej używać 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

Dziękuję, to jest właśnie to, co było po :) – fmark

+3

Również 'seq_len (0)' daje wektor długości 0 (w przypadku gdy masz zmienna trzymająca limit, zamiast wektora do pętli). – cbeleites

Powiązane problemy