2013-01-04 19 views
19

के आंशिक मिलान मुझे पता है कि एक सूची के लिए, आंशिक मेल जब बुनियादी ऑपरेटरों $ और [[ का उपयोग कर का अनुक्रमण किया जाता है। उदाहरण के लिए:समारोह तर्क

ll <- list(yy=1) 
ll$y 
[1] 1 

लेकिन मैं अभी भी एक अनुसंधान नौसिखिया हूँ और यह मेरे लिए नया है, समारोह तर्कों की आंशिक मेल:

h <- function(xx=2)xx 
h(x=2) 
[1] 2 

मैं समझता हूँ कि यह कैसे काम करता चाहते हैं। इसके पीछे तंत्र क्या है? क्या इसका कोई दुष्प्रभाव है? मैं समझना चाहता हूं कि एक्सएक्स तर्क दिया गया है तो कोई परीक्षण कैसे कर सकता है? Andrie टिप्पणी के बाद

संपादित करें:

आंतरिक आर pmatch एल्गोरिथ्म का उपयोग करता है एक उदाहरण यह कैसे काम करता तर्क से मेल करने के लिए, यहाँ:

pmatch("me", c("mean", "median", "mode")) # error multiple partial matches 
[1] NA 
> pmatch("mo", c("mean", "median", "mode")) # mo match mode match here 
[1] 3 

लेकिन आर ऐसी सुविधा है? partial unique मिलान के पीछे मूल विचार क्या है?

+3

पढ़ें http://cran.r-project.org/doc/manuals/R-lang.html#Argument-matching – Andrie

+1

@Andrie लिंक के लिए धन्यवाद! मैं इसे उत्तर के रूप में स्वीकार करूंगा, यहां तक ​​कि यह समझा नहीं जाता कि आर में यह सुविधा क्यों है? यह अन्य सुविधाओं के दुष्प्रभाव की तरह दिखता है क्योंकि यह एकाधिक आंशिक मिलान करने में त्रुटि है। – agstudy

+3

यहां "क्यों" का अनुमान है। आर को कमांड लाइन आंकड़े भाषा के रूप में डिजाइन किया गया था। डेटा का विश्लेषण करने का एक तेज़ और आसान तरीका। आंशिक मिलान कमांड लाइन विश्लेषण को आसान बनाता है (लेकिन प्रोग्रामिंग अधिक भरा हुआ है)। – csgillespie

उत्तर

17

आंशिक मिलान आपको लंबे तर्क नाम टाइप करने के लिए मौजूद है। इसके साथ खतरा यह है कि फ़ंक्शंस बाद में अतिरिक्त तर्क प्राप्त कर सकता है जिस पर आपके आंशिक मिलान के साथ संघर्ष होता है। इसका मतलब यह है कि यह इंटरैक्टिव उपयोग – यदि आप कोड है कि एक लंबे समय के लिए रहेंगे लिख रहे हैं (एक पैकेज में जाने के लिए उदाहरण के लिए) तो आप हमेशा पूर्ण तर्क नाम लिखना चाहिए लिए ही उपयुक्त है। दूसरी समस्या यह है कि एक तर्क नाम संक्षेप में, आप अपना कोड कम पठनीय बना सकते हैं।

दो आम अच्छा प्रयोग हैं:

  1. बजाय seq (या seq.int) समारोह के साथ lenlength.out

  2. allall.names के बजाय ls फ़ंक्शन के साथ।

की तुलना करें:

seq.int(0, 1, len = 11) 
seq.int(0, 1, length.out = 11) 

ls(all = TRUE) 
ls(all.names = TRUE) 

इन दोनों मामलों में, कोड के बारे में के रूप में आसान छोटा तर्क नाम के साथ पढ़ने के लिए है, और कार्यों पुराने और पर्याप्त स्थिर है कि एक के साथ एक और तर्क हैं विरोधाभासी नाम जोड़ने की संभावना नहीं है।

टाइपिंग पर बचाने के लिए एक बेहतर समाधान नहीं बल्कि संक्षिप्त नाम का उपयोग, चर और तर्क नामों में से स्वत: पूर्ण करने का उपयोग करने के बजाय, है। आर जीयूआई और आरस्टूडियो टीएबी कुंजी का उपयोग करके इसका समर्थन करते हैं, और आर्किटेक्ट CTRL + स्पेस का उपयोग करके इसका समर्थन करता है।

+1

मैं 'ls' में' a = T' का भी उपयोग करता हूं। कभी-कभी आप इस डिज़ाइन निर्णय पर सामान्य टिप्पणी –

+2

सामान्य टिप्पणी जानते हैं तो आप इससे दूर हो सकते हैं। /आंशिक रूप से मेल खाने वाले तर्क नामों की इस विशेषता पर चेहरे का निशान जो किसी भी कारण से डीबगिंग सिरदर्द का कारण बन सकता है। 1. यदि सीबीबी लंबे तर्क नाम टाइप करने के लिए है तो उन्हें पहले स्थान पर लंबे समय तक नाम न दें? 2. टैब-स्वत: पूर्णता एफटीडब्ल्यू! –

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