Методы получения объекта R - PullRequest
47 голосов
/ 01 января 2012

Учитывая произвольный объект R, как я могу получить все методы, связанные с объектом?

Ответы [ 3 ]

52 голосов
/ 01 января 2012

Самое близкое, что я могу вспомнить, это 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 голосов
/ 01 января 2012

Класс объекта R восстанавливается с помощью class.У объектов нет методов, связанных с ними на типичном языке R.Класс объекта определяет, какие функции-методы будут применены к нему.Чтобы определить, какие функции имеют методы, связанные с данным классом, вам необходимо проверить все доступные функции, чтобы увидеть, существует ли метод, специфичный для класса.Даже в этом случае универсальные функции в большинстве случаев будут пытаться использовать метод «по умолчанию».

Некоторые методы, связанные с универсальной функцией S3, отображаются с methods.Методы функции S4 восстанавливаются с помощью showMethods.Итак, для того, что большинство людей назвали бы «объектами», ваш вопрос не имеет смысла, но если бы это случилось, что вы включили функции под общим термином «объекты» (что технически справедливо), то я ответил.

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

Тогда есть группа методов, которые можно было бы назвать «неявными», хотя их имя 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, но вы бы видели их на странице справки для? groupGeneric.Вы не видите Ops.numeric.Несколько более низкое представление уровня обеспечивается:

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

Они приведут к ошибке, если предложен неверный аргумент класса.

2 голосов
/ 13 декабря 2015

Некоторые пакеты определяют функции, которые не являются методами, но, тем не менее, предназначены для использования с определенным классом.Например, библиотека (igraph) определяет функцию radius(_), которая предназначена для использования с объектами в классе igraph.Поскольку такие функции не являются методами, methods(_) и showMethods(_) не будут их раскрывать.

В таких случаях lsf.str(_) может быть очень полезным.Например:

lsf.str("package:igraph")

включает строку:

radius : function (graph, mode = c("all", "out", "in", "total"))  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...