[Rd] [External] Re: svd() results should have a class

Serguei Sokol @oko| @end|ng |rom |n@@-tou|ou@e@|r
Fri Jun 24 09:54:29 CEST 2022


Le 24/06/2022 à 02:22, Duncan Murdoch a écrit :
> 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
But ...

 > kappa(X, exact=TRUE)
[1] 62.68048

So, the honor of svd() is safe ;)

I would definitely see solve.svd() method if such class would be added.

Best,
Serguei.

>
> Duncan Murdoch
>
>> Russ
>>
>> Sent from my iPad
>>
>> On Jun 23, 2022, at 6:53 PM, Robert Harlow <rharlow86 using 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-lenth using uiowa.edu<mailto:russell-lenth using 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-lenth using uiowa.edu<mailto:Russell-lenth using uiowa.edu>
>>
>>          [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-devel using r-project.org<mailto:R-devel using r-project.org> mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>     [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> 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


-- 
Serguei Sokol
Ingenieur de recherche INRAE

Cellule Mathématiques
TBI, INSA/INRAE UMR 792, INSA/CNRS UMR 5504
135 Avenue de Rangueil
31077 Toulouse Cedex 04

tel: +33 5 61 55 98 49
email: sokol using insa-toulouse.fr
http://www.toulouse-biotechnology-institute.fr/en/technology_platforms/mathematics-cell.html



More information about the R-devel mailing list