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 <[email protected]>
Sent: Thursday, June 23, 2022 7:23 PM
To: Lenth, Russell V <[email protected]>; Robert Harlow
<[email protected]>
Cc: [email protected]
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 <[email protected]> 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
> <[email protected]<mailto:[email protected]>> 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
> [email protected]<mailto:[email protected]>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> [email protected]<mailto:[email protected]> mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> [email protected] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel