From jmc at research.bell-labs.com  Thu Oct  9 15:46:50 2003
From: jmc at research.bell-labs.com (John Chambers)
Date: Thu Oct  9 20:46:05 2003
Subject: [Rd] S4 group generic Complex not working (PR#4483)
References: <Pine.LNX.4.44.0310091725400.12863-100000@gannet.stats>
Message-ID: <3F85AD1A.5DB6B895@research.bell-labs.com>

Prof Brian Ripley wrote:
> 
> On Thu, 9 Oct 2003 saikat@stat.wisc.edu wrote:
> 
> > The Complex group generic for S4 methods is not working:
> >
> >  > setClass('foo', representation(z='complex'))
> > [1] "foo"
> >  > setMethod('Complex', 'foo', function(z) callGeneric(z@z))
> > [1] "Complex"
> >  > Arg(new('foo', z=1+0i))
> > Error in Arg(new("foo", z = 1 + (0+0i))) :
> >          non-numeric argument to function
> >  >
> 
> > The fix is to add
> >
> >      if (DispatchGroup("Complex", call, op, args, env, &x))
> >       return x;
> >
> > near the beginning of do_cmathfuns in complex.c.

For arguments that might have methods, DispatchGroup first tries to
dispatch an S4 method, then if none is found goes on to look for an S3
method.

The choice would seem to be:  (1) allow both S4 and S3 group methods for
Complex (& revise current documentation); or (2) special-case the code
in DispatchGroup to skip S3 methods when argument `group' matches
"Complex".

Preferences?

John

> 
> I don't think that's right: that would set up an S3 group generic
> Complex, and there is no such thing.  That's not how S4 group generics are
> implemented, according to ?Complex.
> 
> --
> Brian D. Ripley,                  ripley@stats.ox.ac.uk
> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
> University of Oxford,             Tel:  +44 1865 272861 (self)
> 1 South Parks Road,                     +44 1865 272866 (PA)
> Oxford OX1 3TG, UK                Fax:  +44 1865 272595
> 
> ______________________________________________
> R-devel@stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-devel


[Rd] S4 group generic Complex not working (PR#4483)
John Chambers