[Rd] question about trailing arguments in an S4 method

Byron Ellis byron.ellis at gmail.com
Sun Dec 17 03:57:21 CET 2006


He wants to specify arguments to AIC that act like the "k" argument
and is thinking of faking it by, essentially, doing another round of
argument matching on ...

I think that if you define an S4 generic that only dispatches on the
first argument you may be able to do it for a specific method. On the
bright side, the new documentation for AIC would take precedence over
the stats documentation so the users couldn't actually complain about
the method not matching the documentation.

For flowCore we wanted to use filter, which unfortunately assumes that
the only thing I would ever want to filter is a time series and isn't
even an S3 generic, and had to do something similar by specifying
"useAsDefault=FALSE" in the generic. It seems to have broken
dispatching to the original filter function though, which is something
we'll have to fix.


On 12/16/06, Seth Falcon <sfalcon at fhcrc.org> wrote:
> Ben Bolker <bolker at zoo.ufl.edu> writes:
>
> >   I'm trying to add arguments to the AIC method
> > for some classes -- things like
> >   weights=TRUE to calculate AIC weights
> >   corr=TRUE, nobs to calculate AICc
> >   delta=TRUE  to put a delta-AIC column in the output.
> >
> >  The problem is that AIC is defined as
> > AIC(object, ..., k=2)  where k is the constant associated
> > with the penalty term and ... is a list of objects
> > that will have their AICs calculated and listed.
> > Thus I'm not allowed (I think) to extend the definition to
> >
> > AIC(object, ..., nobs, corr=FALSE, delta=FALSE, weights=FALSE, k=2)
>
> I think you can add args before the '...'.  However, you will need to
> provide values for them in all calls or else they will steal a fit
> from the '...' args.
>
> I don't understand really what you are trying to achieve, so this may
> not be helpful.  Nevertheless, here is a dummy example that you may
> find useful.
>
>
> setClass("Foo",
>          representation=representation(
>            fit="lm"))
>
> setMethod("AIC", "Foo",
>           function(object, weights=TRUE, delta=TRUE, ..., k=2) {
>               ans <- AIC(object=object at fit, k=k, ...)
>               args1 <- list(weights=weights, delta=delta, k=k)
>               cat("args\n")
>               print(args1)
>               cat("answer:\n")
>               print(ans)
>           })
>
> example("AIC")
> foo <- new("Foo", fit=lm1)
> AIC(foo)
> ## AIC(foo, lm1)   # this doesn't work, lm1 gets picked up as the weights arg
> AIC(foo, weights=FALSE, delta=TRUE, lm1, lm1, lm1)
>
>
>
> + seth
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>


-- 
Byron Ellis (byron.ellis at gmail.com)
"Oook" -- The Librarian



More information about the R-devel mailing list