2011-11-25 9 views
13

आर के बारे में कुल चीजों में से एक है अगर मैं फ़ंक्शन नाम टाइप करता हूं तो मुझे कार्यान्वयन दिखाई देता है। लेकिन इस एक मुझे भ्रमित कर रहा है, रिकर्सिवली:उपयोग विधि का अर्थ क्या है?

> library(xts) 
> align.time 
function (x, ...) 
{ 
    UseMethod("align.time") 
} 
<environment: namespace:xts> 

एक्स एक XTS वस्तु है, इसलिए इसका मतलब यह नहीं है कि यह XTS align.time विधि कॉल होगा ... लेकिन यह है कि क्या मैं कम से देख रहा हूँ है! (टाइप xts::align.time बिल्कुल एक ही प्रतिक्रिया देता है।)

+2

भी देखें यह बहुत ही इसी तरह के प्रश्न: http://stackoverflow.com/q/5835312/602276 http की – Andrie

+1

सर्किल 7। burns-stat.com/pages/Tutor/R_inferno.pdf आपको प्राप्त करने में मदद कर सकता है जेनेरिक कार्यों और विधियों के बारे में एक भावना है। –

+0

@ पैट्रिकबर्न धन्यवाद, यह एक उपयोगी पढ़ने की तरह दिखता है। –

उत्तर

16

संक्षिप्त उत्तर यह है कि आप xts:::align.time.xts फ़ंक्शन की तलाश में हैं।

लंबा उत्तर आप पा सकते हैं कि जो तरीकों methods फोन करके align.time के लिए मौजूद है:

> methods(align.time) 
[1] align.time.POSIXct* align.time.POSIXlt* align.time.xts*  

    Non-visible functions are asterisked 

यह आपको बताता है एक विधि align.time.xts कि नाम स्थान से निर्यात नहीं कर रहा है नहीं है। इस बिंदु पर आप शायद अनुमान लगा सकते हैं कि यह पैकेज xts में पाया जा सकता है, लेकिन आप इस बात की पुष्टि कर सकते हैं कि getAnywhere साथ:

> getAnywhere("align.time.xts") 
A single object matching 'align.time.xts' was found 
It was found in the following places 
    registered S3 method for align.time from namespace xts 
    namespace:xts 
with value 

function (x, n = 60, ...) 
{ 
    if (n <= 0) 
     stop("'n' must be positive") 
    .xts(x, .index(x) + (n - .index(x)%%n), tzone = indexTZ(x), 
     tclass = indexClass(x)) 
} 
<environment: namespace:xts> 

आप, ज़ाहिर है, स्रोत सीधे पढ़ सकते हैं, लेकिन समारोह के बाद से : // www निर्यात नहीं किया है, तो आप package:::function (यानी तीन कोलन) का उपयोग करने की जरूरत है:

> xts:::align.time.xts 
function (x, n = 60, ...) 
{ 
    if (n <= 0) 
     stop("'n' must be positive") 
    .xts(x, .index(x) + (n - .index(x)%%n), tzone = indexTZ(x), 
     tclass = indexClass(x)) 
} 
<environment: namespace:xts> 
7

align.time()XTS से नाम स्थान निर्यात किया जाता है, तो xts::align.time और align.time एक ही बात कर रहे हैं। आप ध्यान दें वर्ग "xts" की वस्तुओं पैकेज में प्रदान की जाती के लिए एक align.time() विधि है कि वहाँ और कहा कि (यह सिर्फ एक S3 पद्धति के रूप में पंजीकृत किया गया है) नाम स्थान से निर्यात नहीं कर रहा है की जरूरत है:

> xts:::align.time.xts 
function (x, n = 60, ...) 
{ 
    if (n <= 0) 
     stop("'n' must be positive") 
    .xts(x, .index(x) + (n - .index(x)%%n), tzone = indexTZ(x), 
     tclass = indexClass(x)) 
} 
<environment: namespace:xts> 

यह इस पद्धति है कि जब आप "xts" ऑब्जेक्ट को align.time() पर पास करते हैं तो कॉल किया जा रहा है।

जब आप align.time()UseMethod() पर कॉल करते हैं तो पहले तर्क के रूप में आपूर्ति की गई वस्तु के वर्ग के लिए उपयुक्त "align.time" विधि की खोज और कॉल को सेट अप करें। UseMethod ठीक वही कर रहा है जो आपको लगता है कि यह कर रहा है, आपने दो अलग-अलग तरीकों से एक ही कार्य (जेनेरिक) को देखकर खुद को उलझन में डाल दिया है।

+0

+1 को संशोधित करने के लिए ;-) – Andrie

+1

:-) आप पर वापस ठीक है। ओपी को स्वीकार करने का निर्णय लेने पर हमारे संबंधित प्रतिनिधि प्रोफाइल के पहले व्युत्पन्न को ध्यान में रखना चाहिए। आप देर से आगे बढ़ रहे हैं! ;-) –

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