यदि आप एक सामान्य फ़ंक्शन के अंदर एक चर परिभाषित करते हैं, तो यह विधि के लिए उपलब्ध है। उदाहरण के लिए:सामान्य कार्यों में दायरा R
g <- function(x) {
y <- 2
UseMethod("g")
}
g.default <- function() y
g()
[1] 2
लेकिन यदि आपके द्वारा परिभाषित चर वैरिएबल पैरामीटर के समान नाम है, तो ऐसा नहीं होता है। ऐसा लगता है कि आर विधि को कॉल करने से पहले उस चर को हटा देता है:
g <- function(x) {
x <- 2
UseMethod("g")
}
g.default <- function() x
g()
Error in g.default() : object 'x' not found
क्या कोई यह बता सकता है कि यहां क्या हो रहा है?
मैं मानता हूं कि यही कारण है कि यह हो रहा है। लेकिन अगर आप जेनेरिक को भेज रहे हैं, तो उस वस्तु को संशोधित करना चाहते हैं, तो आपको इसे 'UseMethod() 'के दूसरे पैरामीटर के रूप में पास करना चाहिए। साथ ही, यह अच्छा होगा अगर आप सामान्य कार्यान्वयन को कम से कम एक आम पहला तर्क साझा करते हैं। यह अजीब बात है कि 'g.default()' में पैरामीटर नहीं है। यह वह जगह है जहां कोई संशोधित 'x' पास करने की अपेक्षा करेगा। – MrFlick
@MrFlick - लेकिन जैसा कि आप देख सकते हैं, यहां तक कि 'UseMethod' के लिए दूसरा तर्क भी पास नहीं होता है। यह केवल यह निर्धारित करने के लिए प्रयोग किया जाता है कि कौन सी विधि प्रेषित की जानी चाहिए (जो कि किसी भी मामले में आपको जेनेरिक फ़ंक्शन कॉल से जो चीज़ चाहिए, उसे लगता है)। मैं कई तरीकों की तर्क सूचियों को कैसे व्यवस्थित करने के बारे में आपकी सामान्य सिफारिश से सहमत हूं। –
@MrFlick - मुझे यह मानना है कि अब तक मैंने इसकी सराहना नहीं की है कि आप * * * कर सकते हैं, यदि आप चाहते हैं, तो कई प्रयोग किए गए तर्कों के मूल्यों के आधार पर प्रेषण के लिए 'UseMethod() 'का उपयोग करें (अधिक एस 4 कक्षाओं के साथ क्या होता है)। इसे जेनेरिक के शरीर में थोड़ी या प्रीप्रोकैसिंग की आवश्यकता होगी, लेकिन ऐसा लगता है कि इसे पूरा करना मुश्किल नहीं होगा। मुझे आश्चर्य है कि इसका उपयोग किसी भी प्रसिद्ध आर पैकेज में किया जाता है। –