Подтвердить что ты не робот

Получить методы объекта R

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

4b9b3361

Ответ 1

Ближайшим, о котором я могу думать, является 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 также может оказаться полезным.

Ответ 2

Класс объекта 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("+")

Это вызовет ошибку, если предлагается неправильный аргумент класса.

Ответ 3

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

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

lsf.str("package:igraph")

содержит строку:

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