Duncan et al., The real example would be the estimability package, in which there is a generic function nonest.basis and methods for classes lm, matrix, and qr. I wanted to add a method for class svd except there is no such class.
I agree BTW that the safe thing to do would be to have the returned object be of class c("svd", "list"). Best, Russ -----Original Message----- From: Duncan Murdoch <murdoch.dun...@gmail.com> Sent: Thursday, June 23, 2022 7:23 PM To: Lenth, Russell V <russell-le...@uiowa.edu>; Robert Harlow <rharlo...@gmail.com> Cc: r-devel@r-project.org Subject: Re: [Rd] [External] Re: svd() results should have a class On 23/06/2022 8:07 p.m., Lenth, Russell V wrote: > Bob, > > I'm not talking about using svd as a generic method. I am talking > about a method FOR svd results, e.g. an S3 method like foo.svd(), for > which there already exist other methods, say foo.default and foo.qr. > Currently if I wanted to do > > svdobj <- svd(x) > foo(svdobj) > > it would not dispatch correctly because there is no svd class. Instead, it > would be handled by foo.list if it exists, and it is certainly not clear that > foo.list would do the right thing. I think this would be more convincing if you gave a real example. You can see the existing methods for the "qr" and "eigen" classes using methods(class = "qr") methods(class = "eigen") When I do it, I think I'm only seeing methods from base packages, and they are: kappa for qr solve for qr print for eigen I think the default print method works fine for svd() results. kappa.svd would probably make sense, but would need some thought: calculating kappa on a matrix and using the help page for kappa to naively calculate it from the svd() of that matrix give different results: > set.seed(123) > X <- matrix(rnorm(25), 5,5) > kappa(X) [1] 90.71283 > s <- svd(X) > s$d[1]/s$d[length(s$d)] [1] 62.68048 Duncan Murdoch > Russ > > Sent from my iPad > > On Jun 23, 2022, at 6:53 PM, Robert Harlow <rharlo...@gmail.com> wrote: > > > Don't have a view on whether it makes sense in base R or not, but WRE section > 7.1 may be helpful to you: > https://cran.r-project.org/doc/manuals/R-exts.html#Adding-new-generics. > > It's not uncommon for packages to want to make base methods generic and the > above link provides advice on how to do so. > > Bob > > On Thu, Jun 23, 2022 at 12:07 PM Lenth, Russell V > <russell-le...@uiowa.edu<mailto:russell-le...@uiowa.edu>> wrote: > Dear R-Devel, > > I noticed that if we run base::svd(x), we obtain an object of class "list". > Shouldn't there be an "svd" class, in case someone (e.g., me) wants to write > methods for singular value decompositions? Note that other > matrix-decomposition routines like qr() and eigen() each return objects > having those names. > > Thanks > > Russ Lenth > russell-le...@uiowa.edu<mailto:russell-le...@uiowa.edu> > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel@r-project.org<mailto:R-devel@r-project.org> mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel