मैं एक ऐसा फ़ंक्शन लिखना चाहता हूं जो उसके इनपुट में दो अलग-अलग सांख्यिकीय तरीकों में से एक को लागू करता हो। प्रक्रिया में, मैंने विभिन्न कार्यों के कुछ व्यवहार को देखा जो मुझे समझ में नहीं आ रहा है। समारोह मैं निम्नलिखित गुण होना चाहिए लिखना चाहते हैं: तर्क डिफ़ॉल्ट पर छोड़ दिया जाता है, तोmatch.arg() का उपयोग करके त्रुटि के बिना डिफ़ॉल्ट मानों का मिलान वेक्टर [आर]
- यह एक डिफ़ॉल्ट मान (ताकि उपयोगकर्ता देख सकते हैं जो तरीके उपलब्ध हैं)
- के रूप में एक सदिश होना चाहिए मूल्य, तो दो तरीकों में से पहले किया जाना चाहिए
- उपयोगकर्ता मैन्युअल तरीकों में से एक सदिश की आपूर्ति है, तो समारोह एक त्रुटि
मूल रूप से देना चाहिए, मैं समारोह ख करना चाहते हैं cor
की तरह छेड़छाड़ आर में होती है, आपके पास एक डिफ़ॉल्ट मान method = c("pearson", "kendall", "spearman")
है, और method
निर्दिष्ट किए गए कार्यों को पियरसन सहसंबंध की गणना की गई है। यदि उपयोगकर्ता एक साथ कई विधियों के लिए पूछता है, तो फ़ंक्शन एक त्रुटि देता है।
cor
पर देखकर, यह match.arg(method)
का उपयोग करके किया जाता है। यह व्यवहार यहाँ दर्शाया गया है:
x <- y <- 1:5
cor(x, y, method="pearson")
# = 1
cor(x, y, method="kendall")
# = 1
cor(x, y, method=c("pearson","kendall"))
# gives an error
मैं अपने खुद के समारोह लेखन, भी match.arg(method)
उपयोग करने की कोशिश, लेकिन मैंने महसूस किया कि परिणाम किसी भी तरह अलग है। method
के लिए वेक्टर चुनते समय भी, फ़ंक्शन किसी त्रुटि के साथ समाप्त नहीं होता है, लेकिन पहली विधि के परिणाम देता है।
यह यहाँ दर्शाया गया है:
myfun <- function(x, method=c("add","multiply")){
method <- match.arg(method)
if(method=="add") return(sum(x))
if(method=="multiply") return(prod(x))
}
x <- 1:5
myfun(x, method="add")
# = 15
myfun(x, method="multiply")
# = 120
myfun(x, method=c("add","multiply"))
# = 15
मैं इस व्यवहार को समझ में नहीं आता है, और मुझे खुशी है कि अगर तुम मुझे यहाँ से बाहर मदद कर सकता है किया जाएगा। Google पर मेरे प्रयासों से, मुझे एहसास हुआ कि यह गैर-मानक मूल्यांकन से संबंधित हो सकता है, लेकिन मैं अभी तक दो और दो को एक साथ नहीं रख सकता।
अग्रिम धन्यवाद, आपकी मदद बहुत सराहना की है!
चीयर्स!
संपादित करें:
मैं कर सकता भी फिर से वाक्यांश मेरे सवाल:
क्या शक्तिशाली टोना cor
कि यह रिटर्न पियर्सन सहसंबंध जब method
आपूर्ति नहीं की गई है, लेकिन यह एक त्रुटि जब देता है कि क्या करता है method = c("pearson", "kendall", "spearman")
स्पष्ट रूप से निर्दिष्ट है?
क्या मैं आपको सही ढंग से समझता हूं कि 'cor' और' myfun' का व्यवहार भिन्न होता है क्योंकि मैंने दो-तत्व वेक्टर के लिए परीक्षण किया है, जहां 'cor' एक त्रुटि देता है क्योंकि इसका डिफ़ॉल्ट तर्क लंबाई 3 है, और 'myfun' बिना त्रुटि के चलाता है क्योंकि इसका डिफ़ॉल्ट तर्क लंबाई 2 है? – SimonG
"वांछित" व्यवहार वास्तव में प्रश्न का हिस्सा नहीं था। मैंने स्वयं को हल किया है कि 'लापता (विधि)' का उपयोग करके 'विधि' की आपूर्ति की जाती है और 'स्टॉप' का उपयोग करके त्रुटि को प्रिंट करके अगर इसे लम्बाई से आपूर्ति की जाती है> 1. इस तरह मुझे डमी तर्क की आवश्यकता नहीं है मैन पेजों में भी दिखाएं। – SimonG
हां, 'cor' और' myfun' का व्यवहार डिफ़ॉल्ट तर्कों की लंबाई के कारण भिन्न होता है। और मुझे लगता है कि वांछित व्यवहार सवाल का हिस्सा नहीं था। मैंने आपके लिए जरूरी समाधान नहीं जोड़ा, लेकिन अन्य लोगों के लिए जो इस प्रश्न को पा सकते हैं और अभी तक एक संतोषजनक समाधान नहीं मिला है। – shadow