2012-06-06 8 views
9

एक बार आर के seq समारोह के "चतुराई" से अधिक मुझे कोने मामले में बुरी तरह से प्रभावित किया है अधिक से अधिक है जब lower == upper - 1 कि एक खाली अनुक्रम बनाता है:अनुक्रम निर्माण करता है, तो कम से ऊपरी बाध्य

> 1:0 
[1] 1 0 
> seq(1, 0) 
[1] 1 0 
> seq(1, 0, 1) 
Error in seq.default(1, 0, 1) : wrong sign in 'by' argument 

मैं नहीं कर रहा हूँ इस अजीब व्यवहार के कारणों के लिए पूछना - मुझे लगता है कि अब यह सिर्फ एक विरासत है जिसके साथ हमें रहना है। इसके बजाय, मुझे पता है कि किसी भी पैकेज एक seq ऑपरेटर कि इस मामले में एक खाली अनुक्रम रिटर्न लागू करता है, निम्नलिखित की तरह करता है, तो चाहते हैं:

safe.seq.int <- function(from, to, by=1) { 
    if (from > to) integer(0) else seq.int(from, to, by) 
} 

> safe.seq.int(1, 0) 
integer(0) 

उत्तर

13

यह अच्छा अभ्यास वास्तव में इसी कारण seq_len(n) बजाय 1:n उपयोग करने के लिए - अगर n=0 तो आपको c(1,0) के बजाय एक खाली अनुक्रम मिलता है।

आशा इस मदद करता है

+0

बिल्कुल मुझे जो चाहिए, धन्यवाद! पहले एक कोशिश नहीं की है। बहुत खराब दस्तावेज में 'seq_len (0) 'के लिए एक उदाहरण शामिल नहीं है ... – krlmlr

+1

कोई जांच नहीं - और मेरी पहली टिक के लिए धन्यवाद! :) –

3

यह बहुत दुर्भाग्यपूर्ण है कि दोनों है: ऑपरेटर और seq() फ़ंक्शन नहीं इस मामले को संभाल सकता है। अब तक का सबसे अच्छा जवाब मैंने पाया है:

seq(a,b,length = max(0,b-a+1)) 
संबंधित मुद्दे