ここでuseMethodは何を意味していますか?

Rについてのkoolの事の1つは、実装を見るために関数名をタイプする場合です。しかし、これは再帰的に私を混乱させる:

> library(xts)
> align.time
function (x, ...) 
{
    UseMethod("align.time")
}

xはXTSオブジェクトですので、XTSのalign.timeメソッドを呼び出すことはありません...しかし、それは私が見ているものです! ( xts :: align.time とタイプすると、まったく同じ応答が得られます)。

16
@PatrickBurnsありがとう、それは有用な読書のように見えます。
追加された 著者 Darren Cook,
返事をありがとう、すべての非常に便利な(私は彼がギャビンよりもポイントを必要とするようにアンドリューに目を付けた;-)。私は、次回私が立ち往生するときに、メソッド()とトリプルコロンを試して覚えていきます。
追加された 著者 Darren Cook,
同様の質問も参照してください: stackoverflow.com/q/5835312/602276
追加された 著者 Andrie,

2 答え

簡単な答えは、関数 xts ::: align.time.xts を探していることです。

より長い答えは、メソッドを呼び出すことによって、どのメソッドが align.time に存在するかを見つけることができるということです。

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

   Non-visible functions are asterisked

これは、名前空間からエクスポートされていない align.time.xts というメソッドがあることを示しています。この時点で、 getAnywhere で確認できます: xts

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


もちろん、ソースを直接読むことはできますが、関数がエクスポートされていないため、 package ::: function (つまり3つのコロン)を使用する必要があります。

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

21
追加された

align.time() is exported from the xts namespace, so xts::align.time and align.time are the same thing. You need to note that there is an align.time() method for objects of class "xts" provided in the package and that is not exported from the namespace (it is just registered as an S3 method):

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

このメソッドは、 "xts" オブジェクトを align.time()に渡すときに呼び出されます。

align.time() UseMethod()を呼び出すと、適切な "align.time" メソッドの検索と呼び出しが設定されます。最初の引数として指定されたオブジェクトのクラスに対して使用可能です。 UseMethod は、あなたが何をしていると思っているかを正確に実行しているので、同じ関数(generic)を2つの異なる方法で見て混乱してしまっただけです。

7
追加された
補正するために+1 ;-)
追加された 著者 Andrie,
:-)あなたに戻って。受諾者は、受諾の授与を決定する際に、それぞれの担当者プロファイルの一次導関数も考慮に入れなければなりません。あなたは遅くの前に自動車を運転している! ;-)
追加された 著者 Gavin Simpson,