获取对象方法R

给定一个任意的R对象,我怎样才能获得与该对象相关的所有方法?

我能想到的最接近的是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 

或者为了一个function:

 > 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也可能certificate是有用的阅读。

一个R对象的类用class来恢复。 在典型的R术语中,对象没有与它们相关的方法。 对象的类决定了将要应用的函数方法。 为了确定哪些函数具有与给定类关联的方法,您需要testing所有可用的函数以查看是否存在特定于类的方法。 即使这样,generics函数也会尝试在大多数情况下使用“默认”方法。

与通用S3function相关的一些方法用methods显示。 使用showMethods可以恢复S4函数的方法。 所以,对于大多数人称之为“对象”的东西,你的问题没有意义,但是如果发生了包含“对象”这个通用术语(这在技术上是公平的)下的function,那么我已经回答了。

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

然后有一组方法可能被称为“隐式”,尽pipe它们的R名称是“groupGeneric”

  ?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 

即使如此,你还没有真正的显示Math或Ops家族的成员,但是你可以在group-generic的帮助页面看到他们。 你看不到Ops.numeric。 较低级别的视图由以下提供:

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

如果提供错误的类参数,这些将会引发错误。

一些软件包定义的函数不是方法,但是它们仍然用于特定的类。 例如,库(igraph)定义了函数radius(_) ,该函数旨在用于igraph类中的对象。 由于这些函数不是方法, methods(_)showMethods(_)将不会显示它们。

在这种情况下, lsf.str(_)会非常有帮助。 例如:

 lsf.str("package:igraph") 

包括行:

 radius : function (graph, mode = c("all", "out", "in", "total"))