2011-11-25 22 views
13

R ile ilgili kool şeylerden biri, uygulamayı görmeye çalıştığım işlev adını yazıyorsam. böylece o XTS align.time yöntemini arayacak anlamına gelmez,useMethod burada ne anlama geliyor?

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

x bir XTS nesnesidir ... ama bu bakıyorum şudur: Ama bu yinelemeli, beni karıştırıyor! (xts::align.time Yazma aynı tepkiyi verir.)

+2

Ayrıca bkz bu çok benzer soruyu: http://stackoverflow.com/q/5835312/602276 http – Andrie

+1

Çemberi 7: // www. burns-stat.com/pages/Tutor/R_inferno.pdf size yardımcı olabilir Genel işlevlerin ve yöntemlerin ne olduğu hakkında bir fikir. –

+0

@PatrickBurns Teşekkürler, yararlı bir okumaya benziyor. –

cevap

16

Kısa yanıt, xts:::align.time.xts işlevini aradığınızdır.

Uzun yanıt

Eğer methods arayarak align.time için var olan yöntemleri öğrenebilmenizdir:

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

    Non-visible functions are asterisked 

Bu ad ihraç edilmeyen bir yöntemdir align.time.xts olduğunu söyler. Bu noktada o paketin xts bulunabilir tahmin muhtemelen, ancak getAnywhere ile teyit edebiliriz:

> 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> 

Elbette, doğrudan kaynak okuyabilir, ancak işlevi olduğu için ihraç değil, sen package:::function (yani üç nokta üst üste) kullanmanız gerekir:

> 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() böylece xts::align.time ve align.time aynı şey olduğunu, xts gelen ad ihraç edilmektedir. Orada paketinde sağlanan sınıfın "xts" nesneler için bir align.time() yöntemdir ve bu (bu sadece bir S3 yöntemi olarak tescil edilmiştir) ad ihraç olmadığına dikkat etmek gerekir: Bu yöntem

> 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> 

o "xts" nesnesini align.time()'a ilettiğinizde çağrılıyor.

align.time()UseMethod() numaralı telefonu aradığınızda, varsa, ilk bağımsız değişken olarak sağlanan nesne sınıfı için uygun "align.time" yöntemini arar ve çağırır. UseMethod yaptıklarını düşündüğünüz şeyi yapıyor, sadece iki farklı yolla aynı işleve (jenerik) bakarak kendiniz karıştırdınız.

+0

+1'i düzeltmek için ;-) – Andrie

+1

:-) hemen size geri. OP ayrıca, kabulü kabul etmeye karar verirken ilgili rep profillerinin ilk türevini de dikkate almalıdır. Geç kalmadan ilerliyorsun! ;-) –