获取对象方法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"))