2009-08-26 8 views
76

मुझे आर के ifelse कथन समय-समय पर बहुत आसान होने के लिए मिला है। उदाहरण के लिए:आर के ifelse कथन क्यों वैक्टर वापस नहीं कर सकते हैं?

ifelse(TRUE,1,2) 
# [1] 1 
ifelse(FALSE,1,2) 
# [1] 2 

लेकिन मैं कुछ व्यवहार से उलझन में हूं।

ifelse(TRUE,c(1,2),c(3,4)) 
# [1] 1 
ifelse(FALSE,c(1,2),c(3,4)) 
# [1] 3 

क्या यह एक डिज़ाइन विकल्प है जो मेरे वेतनग्रेड से ऊपर है?

+1

ifelse के लिए थोड़ा अजीब डिजाइन तथ्य को देखते हुए (जो केन विलियम्स के जवाब का एक और वाक्य रचना विकल्प है) कि सरल और कुछ काम करता है, तो। – 2sb

+3

ifelse एक वेक्टरकृत समारोह है। उन्हें विभिन्न कार्यों के लिए इस्तेमाल किया जाना चाहिए। – marbel

उत्तर

60

ifelse के लिए दस्तावेज़ राज्यों:

ifelsetest रूप में एक ही आकार जो या तो yes या no पर कि क्या तत्व test की TRUE है निर्भर करता है से चयनित तत्वों से भर जाता है के साथ एक मान देता है या FALSE

अब परिणाम आप लंबाई 1 की कसौटी मान से गुजर रहे हैं के बाद से, आप लंबाई 1. के परिणाम हो रही है आप लंबे समय तक परीक्षण वेक्टर पारित, तो आप मिल जाएगा:

> ifelse(c(TRUE, FALSE), c(1, 2), c(3, 4)) 
[1] 1 4 
+10

शायद आप वास्तव में बयान के दूसरे सेट के लिए क्या चाहते थे 'अगर (TRUE) सी (1,2) अन्य सी (3,4) 'था। –

7

हाँ, मैं ifelse लगता है () वास्तव में तब तैयार किया गया है जब आपके पास परीक्षणों का एक बड़ा लंबा वेक्टर होता है और प्रत्येक को दो विकल्पों में से एक में मैप करना चाहता है।

plot(x,y, col = ifelse(x>2, 'red', 'blue')) 

आप परीक्षण का एक बड़ा लंबा वेक्टर था, लेकिन आउटपुट के लिए जोड़े चाहते हैं तो आपके sapply() या plyr के llply() या कुछ और इस्तेमाल कर सकते हैं, शायद: उदाहरण के लिए, मैं अक्सर साजिश के लिए रंग() इस तरह से करते हैं । -

47

मुझे यकीन है कि आप एक सरल if बजाय बयान ifelse चाहते आर में, if सिर्फ एक नियंत्रण प्रवाह संरचना नहीं है, यह मान सकते हैं:

> if(TRUE) c(1,2) else c(3,4) 
[1] 1 2 
> if(FALSE) c(1,2) else c(3,4) 
[1] 3 4 
+0

आप महोदय एक जीवन बचतकर्ता हैं, धन्यवाद – fuadj

+0

@ केन, यह मेरे लिए काम करता है, भले ही मुझे लगातार एक चेतावनी की आवश्यकता हो, "अगर चेतावनी (req (inputval) ==" सभी ") { स्थिति लंबाई> 1 है और केवल पहला तत्व उपयोग किया जाएगा "'इस चेतावनी से छुटकारा पाने के लिए मुझे क्या करना चाहिए? – user5249203

-1

कभी कभी उपयोगकर्ता सिर्फ एक switch की जरूरत है ifelse के बजाय कथन। उस मामले में:

condition <- TRUE 
switch(2-condition, c(1, 2), c(3, 4)) 
#### [1] 1 2 

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