2012-02-13 20 views
14

क्या आर समर्थन फ़ंक्शन ओवरलोडिंग करता है ??आर - फ़ंक्शन ओवरलोडिंग

मैं की तर्ज में कुछ करना चाहता हूँ:

g <- function(X,Y) { # do something and return something } 
g <- function(X) { # do something and return something} 
+4

आपका उदाहरण कार्यों वैकल्पिक तर्क का एक सरल मामले का सुझाव सिस्टम देखने के लिए चाहता हूँ (जैसा कि नीचे चर्चा की गई है), लेकिन 'फ़ंक्शन ओवरलोडिंग' आर की विधि [प्रेषण प्रणाली] (http://cran.at.r-project.org/doc/manuals/R-lang.html#) के साथ कुछ और हो सकती है। ऑब्जेक्ट_002 डोरिएंटेड-प्रोग्रामिंग) एस 3 और एस 4। – joran

+0

हां, यह वैकल्पिक तर्कों द्वारा किया जा सकता है लेकिन मैं एरलांग फ़ंक्शन परिभाषाओं के समान कुछ ढूंढ रहा हूं :-) – MadSeb

+0

अच्छा सुझाव, @ जोरन। आपने मुझे इसे हराया * और * सबसे उपयुक्त लिंक प्रदान किया। –

उत्तर

13

संपादित करें, ऊपर टिप्पणी में सवाल के स्पष्टीकरण के बाद: उदाहरण के लिए: this page पर

एक नज़र से, यह लग रहा है Erlang आप कार्यों कि आधार पूरी तरह से अलग अलग तरीकों भेजेंगे परिभाषित करने के लिए अनुमति देता है की तरह उनकी तर्क सूची की धर्मार्थ पर (... तक, जिसके बाद तर्क वैकल्पिक हैं/प्रेषित विधि को प्रभावित नहीं करते हैं)।

आर में ऐसा कुछ करने के लिए, आप शायद एस 4 कक्षाओं और विधियों का उपयोग करना चाहेंगे। एस 3 सिस्टम में, प्रेषित विधि पूरी तरह से पहले तर्क की कक्षा पर निर्भर करती है। एस 4 सिस्टम में, जिस विधि को बुलाया जाता है वह तर्क की मनमानी संख्या के वर्गों पर निर्भर हो सकता है।

क्या संभव है इसके एक उदाहरण के लिए, निम्न को चलाने का प्रयास करें। यह आपको raster पैकेज और sp पैकेज दोनों स्थापित करने की आवश्यकता है। उनके बीच, वे रास्टर और वेक्टर स्थानिक डेटा दोनों की साजिश के लिए बड़ी संख्या में कार्य प्रदान करते हैं, और दोनों विधि प्रेषण करने के लिए एस 4 सिस्टम का उपयोग करते हैं। showMethods() पर कॉल द्वारा लौटाई गई प्रत्येक पंक्ति एक अलग फ़ंक्शन से मेल खाती है, जिसे plot()x और y उत्तीर्ण किया गया है, जिसमें संकेत दिया गया है (जिसमें पूरी तरह से "missing" शामिल हो सकता है)।

> library(raster) 
> showMethods("plot") 
Function: plot (package graphics) 
x="ANY", y="ANY" 
x="Extent", y="ANY" 
x="Raster", y="Raster" 
x="RasterLayer", y="missing" 
x="RasterStackBrick", y="ANY" 
x="Spatial", y="missing" 
x="SpatialGrid", y="missing" 
x="SpatialLines", y="missing" 
x="SpatialPoints", y="missing" 
x="SpatialPolygons", y="missing" 

आर यकीन करता है। एक उदाहरण के लिए प्रयास करें,:

plot(x = 1:10) 
plot(x = 1:10, y = 10:1) 

और फिर जाना कैसे समारोह सिद्ध है कि, plot.default लिखकर पर एक नजर है।

सामान्य रूप से, इस तरह की चीज को कैसे कार्यान्वित करना सीखने का सबसे अच्छा तरीका है, उन कार्यों को परिभाषित करने के लिए इस्तेमाल किए गए कोड में चारों ओर घूमने का कुछ समय बिताना होगा जिनके व्यवहार पहले से ही परिचित हैं।

तब, यदि आप विधि प्रेषण के और अधिक परिष्कृत रूपों का अन्वेषण करना चाहते, तो आप दोनों में S3 और एस 4 वर्ग आर द्वारा प्रदान की

8

यह आमतौर पर सबसे अच्छा वैकल्पिक तर्क के माध्यम से किया जाता है।

g <- function(X, Y=FALSE) { 
    if (Y == FALSE) { 
     # do something 
    } 
    else { 
     # do something else 
    } 
} 
+0

यह ठीक दिखता है! मुझे लगता है कि ऐसा कुछ भी अच्छा होगा: जी <- फ़ंक्शन (एक्स, गलत) {# कुछ करें} जी <- फ़ंक्शन (एक्स, TRUE) {# कुछ करें} यह एरलांग/प्रोलॉग फ़ंक्शन जैसा है परिभाषाएं/तर्क मिलान :-) कोई विचार अगर आर में किया जा सकता है? – MadSeb

+0

जो कोड आप वर्णन कर रहे हैं वह आर में काम नहीं करेगा। जो भी आप खोज रहे हैं वह विधि प्रेषण हो सकता है, जैसा कि @ जोशोब्रायन के उत्तर द्वारा चर्चा की गई है, और कुछ शोध की आवश्यकता है जो आप करना चाहते हैं। –

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