[Rd] methods(class = class(<obj>)) - improve for |cl.| > 1 ?
Gabe Becker
becker@g@be @ending from gene@com
Fri Oct 19 20:55:40 CEST 2018
Martin and Kevin,
Perhaps a variant of methods which more directly addresses the use-case
Kevin mentions might be in order?
I am happy to prepare a patch which implements a methodsForObj function
(name very much negotiable), or a third obj argument to methods which takes
the actual object and answers the question "what methods would I hit for an
object just like this one?" directly. Is this something you (Martin, et al
in R core), are interested in and would consider?
I know people can always do methods(class = class(obj)) after the change
being discussed (and contingent on that change what I described could be
trivially implemented that way), but should they need to?
Best,
~G
On Fri, Oct 19, 2018 at 10:55 AM, Kevin Ushey <kevinushey using gmail.com> wrote:
> I think this would be a good change. I think most users use the
> 'methods(class = <...>)' function to answer the question, "what
> methods can I call on objects with these classes?", and in that
> context I think it would be sensible for the function to accept more
> than one class.
>
> Kevin
>
> On Wed, Oct 17, 2018 at 7:15 AM Martin Maechler
> <maechler using stat.math.ethz.ch> wrote:
> >
> > With new "strict" settings in R-devel, the following glm() example
> >
> > > data(anorexia, package = "MASS")
> > > fm <- glm(Postwt ~ Prewt + Treat + offset(Prewt), family = gaussian,
> data = anorexia)
> > > methods(class = class(fm))
> > Warning in grep(name, row.names(info)) :
> > argument 'pattern' has length > 1 and only the first element will be
> used
> > Warning in gsub(name, "", row.names(info)) :
> > argument 'pattern' has length > 1 and only the first element will be
> used
> > Warning in grep(pattern, all.names, value = TRUE) :
> > argument 'pattern' has length > 1 and only the first element will be
> used
> > Warning in grep(pattern, all.names, value = TRUE) :
> > argument 'pattern' has length > 1 and only the first element will be
> used
> > ...........
> > ...........
> > ...........
> > [ca. 20 lines of warnings]
> >
> > and then shows the "glm" methods, but not "lm" ones.
> >
> > This is not a bug strictly, as ?methods says that
> >
> > class: a symbol or character string naming a class: only used if
> > ‘generic.function’ is not supplied.
> >
> > and so the use of
> >
> > methods(class = class(<obj>))
> >
> > is a user error when class(<obj>) is of length > 1.
> >
> > In the case of e.g. a randomForest() result, we also get 25
> > warnings, i.e. 50 lines, but then
> >
> > --->>> no methods found
> >
> > because
> >
> > > class(rf.fit)
> > [1] "randomForest.formula" "randomForest"
> >
> > and no methods are defined for "randomForest.formula".
> >
> > ---
> >
> > Of course, all this works fine with S4 classes: There the full
> > inheritance is used and all methods are found.
> >
> > Still, would it make sense to improve the underlying .S3methods() ?
> >
> > I assume it will break *some* overzealous package checks out
> > there when .S3methods() and hence methods() would return *more*
> > in such case.
> >
> > Comments?
> >
> > --
> > Martin Maechler
> > ETH Zurich and R Core
> >
> > ______________________________________________
> > R-devel using r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
--
Gabriel Becker, Ph.D
Scientist
Bioinformatics and Computational Biology
Genentech Research
[[alternative HTML version deleted]]
More information about the R-devel
mailing list