4

UseMethodRが探しているもの(つまり、クラスMyClass:MyGeneric.MyClassのxで呼び出される関数MyGeneric(x))を見つけたら、Rがメソッドを見つける方法を理解しようとしています。具体的には、どの環境が関係していますか?

検索メカニズムを指定していないR言語マニュアルの「5.3メソッドディスパッチ」と「5.4UseMethod」のセクションを読みました。のR-ヘルプページにUseMethod手がかりがあります。

...UseMethod and NextMethod search for methods in two places: 
first in the environment in which the generic function is called, 
and then in the registration data base for the environment 
in which the generic is defined (typically a namespace)

しかし、これは合計されません(私の頭の中=)。具体的な例を次に示します。

library( xts )
as.matrix  # shows UseMethod("as.matrix")
methods("as.matrix") # shows as.matrix.xts.  * indicates non-visible
showMethods("as.matrix")  # says <not an S4 generic function>
data(sample_matrix)
as.matrix( as.xts(sample_matrix) ) # how does R find as.matrix.xts??  its not exported!

as.matrixで定義されていnamespace:baseます。Rがその環境、または呼び出し元の環境(R_GlobalEnv)を使用する場合、as.matrix.xtsエクスポートされていないため、Rは見つかりませんでした。xts内の関数が呼び出し環境にあるas.matrixためas.matrix.xts、呼び出し環境が機能しているように見えます。私は何が欠けていますか?

4

2 に答える 2

3

あなたはそれを十分注意深く読んでいません。「登録データベース」は、メソッド自体ではなく、ジェネリックの環境(名前空間)に格納されていると書かれています。の場合base::as.matrix

> grep("as.matrix",ls(base:::.__S3MethodsTable__.), value=TRUE)
[1] "as.matrix.dist"   "as.matrix.raster" "as.matrix.xts"    "as.matrix.zoo"
于 2012-05-09T15:28:40.533 に答える
1

私の知識に追加されたJoshuaの洞察に加えて、ロードされたNAMESPACEにいることは、エクスポートされることと同じではありません。次のいずれかでas.matrix.xts関数を確認できたはずです。

 getAnywhere(as.matrix.xts)
 xts:::as.matrix.xts

入力してみてください

search()

また、SOまたはrhelpで、Rインタープリターの関数呼び出しの検索パスを表示する関数を見たことがありますが、現時点では見つからないようです。これにより、関数名のかなり長いリストが生成されます。

apropos("as", mode="function")

そして、このリストはまだ半分の長さでした:

apropos("^as\\.", mode="function") 
于 2012-05-09T15:53:45.967 に答える