[Rd] "Math" group generics for S4, and a bug

Martin Maechler maechler at stat.math.ethz.ch
Tue Jun 26 19:15:40 CEST 2007


>>>>> "MM" == Martin Maechler <maechler at stat.math.ethz.ch>
>>>>>     on Sat, 23 Jun 2007 00:36:43 +0200 writes:

 {on R-help}

 [.....................]
 [.....................]
 
  >>   Duncan Murdoch

      DM> You might have better luck with

      DM>   log1p(tasa)

    MM> {very good point, thank you, Duncan!}

       DM> if the authors of the Matrix package have written a
       DM> method for log1p(); if not, you'll probably have to do
       DM> it yourself.

    MM> They have not yet.

    MM> Note however that this - and expm1() - would
    MM> automagically work for sparse matrices if these two
    MM> functions were part of the "Math" S4 group generic.

    MM> I'd say that there's only historical reason for them
    MM> *not* to be part of "Math", and I am likely going to
    MM> propose to change this ....

I'm now going to propose ...

As I found, expm1() and log1p()  already *HAVE BEEN*  
in the S3 "Math" group generic  
   ``automagically by implementation''.
Just the documentation for this fact has been missing.

Hence, I've added that doc (uncommitted) and I'm about to add
them to the S4 Math group as well.  When doing so, I'd like to
add few more functions to make S3 and S4 "Math" a bit more compatible :
Consequently, I'm proposing to add the following functions to the S4 Math
group generic :

-  log1p, expm1

-  cummax, cummin	{S3 has them; cumprod(), cumsum() are already}

-  digamma, trigamma    {S3 has them; gamma(), lgamma()   are already}

----

When trying to do the above,
I'm pretty quickly successful for cummax & cummin,
most probably because they are primitive functions.
But I currently have problems for the other four,
and in exploring these problems,
I've found that

   log10()

does not S4- dispatch on "Math" neither,
which I think is a pretty peculiar bug;
I think if that was fixed, then my code changes would also work
to make log1p(), expm1(), digamma() and trigamma() correctly
part of "S4 - Math Group".


Martin



More information about the R-devel mailing list