2012-01-01 8 views
43

Dado un objeto R arbitrario, ¿cómo puedo obtener todos los métodos asociados con el objeto?Obtener métodos Objeto R

+2

En R, los métodos están asociados con funciones, no objetos. Cuanto antes se dé cuenta, más pronto comenzarán a tener sentido los sistemas OO de R. – hadley

+0

Si busca "buscar métodos r", los primeros dos hits lo llevan a los archivos de la página de ayuda apropiada. : P –

+0

@hadley pero no son todos los objetos de funciones? –

Respuesta

48

Lo más cercano que puedo pensar es methods (si es objeto/función S3, List all available methods for an S3 generic function, or all methods for a class.), o showMethods (si S4).

ej .:

> 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 

O para una función:

> 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 también pueden resultar una lectura útil.

12

La clase de un objeto R se recupera con class. Los objetos no tienen métodos asociados con ellos en el típico lenguaje de R. La clase de un objeto determina qué función-métodos se le aplicarán. Para determinar qué funciones tienen los métodos asociados con una clase determinada, debería probar todas las funciones disponibles para ver si había un método específico de la clase. Incluso entonces las funciones genéricas intentarían usar un método "predeterminado" en la mayoría de los casos.

Algunos métodos asociados con una función genérica S3 se muestran con methods. Los métodos de una función S4 se recuperan con showMethods. Entonces, para lo que la mayoría de la gente llamaría "objetos", su pregunta no tiene sentido, pero si sucediera que estaba incluyendo funciones bajo el término general "objetos" (que es técnicamente justo), entonces he respondido.

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

Luego hay un grupo de métodos que podría llamarse "implícita", aunque su nombre R es "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 

E incluso entonces no has realmente mostrar los miembros de la matemáticas o la familia Ops, pero los hubieras visto en la página de ayuda de? groupGeneric. No ves Ops.numeric. Una vista de nivel algo inferior es proporcionada por:

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

Esto arrojará un error si se ofrece el argumento de clase incorrecto.

1

Algunos paquetes definen funciones que no son métodos pero que, no obstante, están pensadas para su uso con una clase particular. Por ejemplo, library (igraph) define la función radius(_), que está diseñada para su uso en objetos de la clase igraph. Dado que tales funciones no son métodos, methods(_) y showMethods(_) no las revelará.

En tales casos, lsf.str(_) puede ser muy útil. Por ejemplo:

lsf.str("package:igraph") 

incluye la línea:

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