[Rd] S4 group generic Complex not working (PR#4483)
Prof Brian Ripley
ripley at stats.ox.ac.uk
Fri Oct 10 09:42:29 MEST 2003
On Thu, 9 Oct 2003, John Chambers wrote:
> Prof Brian Ripley wrote:
> >
> > On Thu, 9 Oct 2003 saikat at 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 at 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?
It makes sense to introduce a S3 group for Complex, and although that
would be a new feature I guess it would be acceptable in a patch release
as a side-effect of a bug fix.
Is this all that is wrong though? I failed to set a method for Arg
directly, but am not sure I am awake enough to have done it right:
> setClass('foo', representation(z='complex'))
[1] "foo"
> setMethod("Arg", "foo", function(z) Arg(z at z))
[1] "Arg"
> Arg(new('foo', z=1+0i))
Error in Arg(new("foo", z = 1 + (0+0i))) :
non-numeric argument to function
>
> 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 at 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 at stat.math.ethz.ch mailing list
> > https://www.stat.math.ethz.ch/mailman/listinfo/r-devel
>
>
--
Brian D. Ripley, ripley at 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
More information about the R-devel
mailing list