The function returns all S3 methods applicable to the object.

Has anyone put together / found a good method to list all the S3 methods available for this object? The built-in methods() function will provide all available methods for the specified class or for the specified common function, but not for the object.

An example that I mean is the glm object, which has the (minor?) "glm" but also inherits from "lm"

 g <- glm(y~x,data=data.frame(x=1:10,y=1:10)) class(g) ## [1] "glm" "lm" 

There are 35 methods for the lm class and 22 for the glm class. I am interested in an answer that combines results

 lapply(class(g),function(x) methods(class=x)) 

in a reasonable way, so that I can immediately see (for example) that there is a glm specific method for add1 , but the alias method inherits from the lm class.

Does anyone have the opportunity to do this, or does he already exist?

PS Steve Walker The Glossary of S3-S4-reference class classes shows that this works automatically for reference classes, where we must use the object to get methods ( x$getRefClass()$methods() ).

+6
source share
2 answers

Here's an attempt to replicate the "standard" behavior

 classMethods <- function(cl) { if(!is.character(cl)) { cl<-class(cl) } ml<-lapply(cl, function(x) { sname <- gsub("([.[])", "\\\\\\1", paste0(".", x, "$")) m <- methods(class=x) data.frame( m=as.vector(m), c=x, n=sub(sname, "", as.vector(m)), attr(m,"info"), stringsAsFactors=F ) }) df<-do.call(rbind, ml) df<-df[!duplicated(df$n),] structure(df$m, info=data.frame(visible=df$visible, from=df$from), class="MethodsFunction") } 

And then you can try it with

 g <- glm(y~x,data=data.frame(x=1:10,y=1:10)) classMethods(g) #or classMethods(c("glm","lm")) 

and it will return

  [1] add1.glm* anova.glm confint.glm* cooks.distance.glm* [5] deviance.glm* drop1.glm* effects.glm* extractAIC.glm* [9] family.glm* formula.glm* influence.glm* logLik.glm* [13] model.frame.glm nobs.glm* predict.glm print.glm [17] residuals.glm rstandard.glm rstudent.glm summary.glm [21] vcov.glm* weights.glm* alias.lm* case.names.lm* [25] dfbeta.lm* dfbetas.lm* dummy.coef.lm* hatvalues.lm [29] kappa.lm labels.lm* model.matrix.lm plot.lm [33] proj.lm* qr.lm* simulate.lm* variable.names.lm* Non-visible functions are asterisked 

It is not as elegant or short as Josh, but I think it is a good rest by default. It is ridiculous to see that the methods function itself is mostly just grep for all known function names. I took the gsub stuff from him.

+4
source

Here's a function that at least tells you which S3 methods the object initiates:

 findMethodsS3 <- function(object) { x <- unlist(lapply(class(object),function(x) methods(class=x))) sort(x[!duplicated(tools::file_path_sans_ext(x))]) } findMethodsS3(g) # [1] "add1.glm" "alias.lm" "anova.glm" # [4] "case.names.lm" "confint.glm" "cooks.distance.glm" # [7] "deviance.glm" "dfbeta.lm" "dfbetas.lm" # [10] "drop1.glm" "dummy.coef.lm" "effects.glm" # [13] "extractAIC.glm" "family.glm" "formula.glm" # [16] "hatvalues.lm" "influence.glm" "kappa.lm" # [19] "labels.lm" "logLik.glm" "model.frame.glm" # [22] "model.matrix.lm" "nobs.glm" "plot.lm" # [25] "predict.glm" "print.glm" "proj.lm" # [28] "qr.lm" "residuals.glm" "rstandard.glm" # [31] "rstudent.glm" "simulate.lm" "summary.glm" # [34] "variable.names.lm" "vcov.glm" "weights.glm" 
+4
source

Source: https://habr.com/ru/post/969788/


All Articles