2012-08-10 15 views
10
bir koleksiyonun endeks değerlerini yineleme geldiğinde aşağıdaki kod yaygın SO görülür

:Endeksi yineleme deyim

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

koleksiyon boşken 1:length(x)i verir 1:0 olur çünkü kod yaramazlık 1 ve 0 değerleri.

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 

Ben x boş ama bunu hatırlayamıyorum zaman herhangi bir öğe bir diziyi tanımlamak için zarif bir deyim gördüğümü hatırlamıyorum. Hangi deyimi kullanıyorsun? ilgi nesnesi boş olduğunda

cevap

12

Ya seq veya seq_along size daha makul bir şey vermek.

> 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 
+0

Mükemmel, 'seq_along' gördüm gördüğüm deyim oldu. – Sim

+1

Ancak indeks değişkenine ihtiyacınız yoksa ve sadece bir şeyin öğeleri üzerinde döngü yapmak istiyorsanız, bir pepe/sapply/vapply veya plyr paketinden bir şey daha zarif olabilir. – Spacedman

+0

@Spacedman Çok doğru ve kesinlikle OP'in aklında tutması gereken bir şey. – Dason