2012-06-19 5 views
6

Ich möchte über einen Bereich von Zahlen aus 1:n Schleife, wenn n ist die Länge des Vektors v in R. Normalerweise würde ich die for (i in 1:length(v)) Syntax verwenden, aber das schlägt fehl, wenn n == 0.Wie formuliere ich eine For-In-Schleife in R, wo ich vielleicht Null-Schleifen möchte?

Was ist der idiomatische Weg, diese Schleife zu machen? Im Moment kann ich die followin, aber es scheint ein wenig hässlich:

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

Und ja, ich weiß, es ist besser zu vektorisieren, aber es gibt Situationen, in denen die Vektorisierung nicht möglich oder würde erfordern, so viel zusätzliche Arbeit, die Es ist viel schwieriger, den Code zu lesen.

Antwort

12

Es wäre besser, zu verwenden 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

Danke, das ist genau das, was ich war nach :) – fmark

+3

Auch 'seq_len (0)' gibt einen Vektor der Länge 0 (falls Sie haben eine Variable, die das Limit hält, anstatt einen Vektor zu durchlaufen. – cbeleites

Verwandte Themen