2012-01-01 6 views
43

任意のRオブジェクトが与えられた場合、オブジェクトに関連付けられたすべてのメソッドを取得するにはどうすればよいですか?オブジェクトメソッドの取得R

+2

を、方法が機能しないオブジェクトに関連付けられています。より早くRのOOシステムが理にかなって始めるとすぐに分かります。 – hadley

+0

"find methods r"をGoogleで検索した場合、最初の2つのヒットが適切なヘルプページファイルに移動します。 :P –

+0

@hadleyしかし、すべての関数オブジェクトではありませんか? –

答えて

48

最も近いと思われるのは、methods(S3オブジェクト/機能の場合、List all available methods for an S3 generic function, or all methods for a class.)またはshowMethods(S4の場合)です。

例えば:

> A <- matrix(runif(10)) 
> B <- methods(class=class(A)) 
> B 
[1] anyDuplicated.matrix as.data.frame.matrix as.raster.matrix* 
[4] boxplot.matrix  determinant.matrix duplicated.matrix 
[7] edit.matrix*   head.matrix   isSymmetric.matrix 
[10] relist.matrix*  subset.matrix  summary.matrix  
[13] tail.matrix   unique.matrix  

    Non-visible functions are asterisked 
> attr(B,'info') 
        visible    from 
anyDuplicated.matrix TRUE  package:base 
as.data.frame.matrix TRUE  package:base 
as.raster.matrix  FALSE registered S3method 
boxplot.matrix   TRUE package:graphics 
determinant.matrix  TRUE  package:base 
duplicated.matrix  TRUE  package:base 
edit.matrix   FALSE registered S3method 
head.matrix    TRUE  package:utils 
isSymmetric.matrix  TRUE  package:base 
relist.matrix   FALSE registered S3method 
subset.matrix   TRUE  package:base 
summary.matrix   TRUE  package:base 
tail.matrix    TRUE  package:utils 
unique.matrix   TRUE  package:base 

や機能について:

> methods(summary) 
[1] summary.aov    summary.aovlist   summary.aspell*   
[4] summary.connection  summary.data.frame  summary.Date   
[7] summary.default   summary.ecdf*   summary.factor   
[10] summary.glm    summary.infl   summary.lm    
[13] summary.loess*   summary.manova   summary.matrix   
[16] summary.mlm    summary.nls*   summary.packageStatus* 
[19] summary.PDF_Dictionary* summary.PDF_Stream*  summary.POSIXct   
[22] summary.POSIXlt   summary.ppr*   summary.prcomp*   
[25] summary.princomp*  summary.srcfile   summary.srcref   
[28] summary.stepfun   summary.stl*   summary.table   
[31] summary.tukeysmooth* 

    Non-visible functions are asterisked 

?Methodsも便利な読み取りを証明することがあります。

12

Rオブジェクトのクラスはclassで復元されます。オブジェクトには、典型的なRの言い回しに関連するメソッドはありません。オブジェクトのクラスによって、どのような関数がメソッドに適用されるかが決まります。特定のクラスに関連するメソッドを持つ関数を判別するには、使用可能なすべての関数をテストして、クラス固有のメソッドがあるかどうかを確認する必要があります。それでも汎用関数でも、ほとんどの場合、「デフォルト」メソッドを使用しようとします。

一般的なS3関数に関連付けられたいくつかのメソッドは、methodsで表示されます。 S4関数のメソッドは、showMethodsで復元されます。だから、ほとんどの人が "オブジェクト"と呼んでいるものは、あなたの質問は意味をなさないが、一般的な用語であるオブジェクト(技術的に公正である)の下に関数を含めると、私は答えた。

showMethods(classes="data.frame") 
methods(class="data.frame") 

は、その後彼らのR名が

?groupGeneric 

methods("Math") # These are "add-on" methods to the primitive Math functions 
[1] Math.data.frame Math.Date  Math.dates*  Math.difftime Math.factor  
[6] Math.mChoice  Math.polynomial* Math.POSIXt  Math.ratetable* Math.Surv*  
[11] Math.times*  

    Non-visible functions are asterisked 
?"+" 

methods("Ops") # The binary operators such as "+", "-", "/" 
[1] Ops.data.frame  Ops.Date   Ops.dates*   Ops.difftime  Ops.factor   
[6] Ops.findFn   Ops.mChoice   Ops.numeric_version Ops.ordered   Ops.polynomial*  
[11] Ops.POSIXt   Ops.raster*   Ops.ratetable*  Ops.Surv*   Ops.times*   
[16] Ops.ts*    Ops.unit*   Ops.yearmon*  Ops.yearqtr*  Ops.zoo*   

    Non-visible functions are asterisked 

その場合でも、あなたが本当に数学のメンバーが表示されていないか、「groupGeneric」ですが、「暗黙の」と呼ばれるかもしれないメソッドのグループがありますOpsファミリがありますが、あなたは?groupGenericのヘルプページでそれらを見たでしょう。 Ops.numericは表示されません。

.Primitive("+") 
# function (e1, e2) .Primitive("+") 

これは、間違ったクラス引数が指定されているとエラーになります。

1

パッケージによっては、メソッドではなく、特定のクラスで使用することを意図した関数を定義するものがあります。例えば、library(igraph)はradius(_)という関数を定義しています。これはigraphクラスのオブジェクトでの使用を意図しています。このような関数はメソッドではないので、methods(_)showMethods(_)はそれらを公開しません。

このような場合、lsf.str(_)は非常に役に立ちます。

lsf.str("package:igraph") 

ライン含む:例えばRで

radius : function (graph, mode = c("all", "out", "in", "total")) 
関連する問題