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

From: Prof Brian Ripley <>
Date: Tue, 26 Jun 2007 18:38:27 +0100 (BST)

Remember that you only get S4 dispatch on Math for S4 generics. log10 is not an S4 generic until you make it one. From the help page

      Note: currently those members which are not primitive functions
      must have been converted to S4 generic functions (preferably
      _before_ setting an S4 group generic method) as it only sets
      methods for known S4 generics.  This can be done by a call to
      'setGeneric', for example 'setGeneric("round", group="Math2")'.

Had you done that (it is not mentioned)?

>From my notes about S4 issues sent to R core a while back:

  1. Setting methods on a group generic only sets methods for existing generics, and only primitives are ab initio generic.

    ?setGeneric and ?Arith differ as to how other members should be     converted into generics (one arg or two), and the example     (setGeneric("+")) seems pointless as that is already generic.

    Whereas all of Ops (and its subgroups) and Complex are ab initio     generic, none of Summary is and log, log10, gamma, lgamma, round,     signif and trunc are not.

    The discrepancies between the S3 and S4 group generics are hard to     explain: sign, digamma, trigamma and gammaCody are S3 group generic     but not S4 group generic (and sign is S4 generic). log10 is S4     group generic but log2 is not. This is probably all history, but     not at all obvious to end users.

so the issue has been raised before.

On Tue, 26 Jun 2007, Martin Maechler wrote:

>>>>>> "MM" == Martin Maechler <>
>>>>>> 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
> ______________________________________________
> mailing list

Brian D. Ripley,        
Professor of Applied Statistics,
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________ mailing list
Received on Tue 26 Jun 2007 - 17:47:44 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 26 Jun 2007 - 21:35:54 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.