2012-06-19 16 views
6

मैं 1:n से n से संख्याओं की एक श्रृंखला से अधिक लूप करना चाहता हूं, जब 0 में v की लंबाई है। आमतौर पर, मैं for (i in 1:length(v)) वाक्यविन्यास का उपयोग करता हूं, लेकिन यह n == 0 पर विफल रहता है।मैं आर में लूप में कैसे बना सकता हूं जहां मैं शून्य बार लूप करना चाहता हूं?

इस लूप को करने का बेवकूफ तरीका क्या है? फिलहाल मैं followin करते हैं, लेकिन यह एक छोटे बदसूरत लगता है:

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

और हाँ, मैं अपने बेहतर vectorise को पता है, लेकिन जब vectorisation संभव नहीं है या इतना अतिरिक्त काम की आवश्यकता होगी स्थितियों देखते हैं कि कोड को पढ़ने में बहुत मुश्किल है।

उत्तर

12

यह उपयोग करने के लिए 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

धन्यवाद, यह सिर्फ मैं क्या :) – fmark

+3

इसके अलावा के बाद किया गया है, 'seq_len (0)' मामले आपके पास में लंबाई 0 (का एक वेक्टर देता है वेक्टर के लूप ओवर की बजाय सीमा को धारण करने वाला चर)। – cbeleites

संबंधित मुद्दे