Re: [Rd] question about trailing arguments in an S4 method

From: Byron Ellis <byron.ellis_at_gmail.com>
Date: Sun 17 Dec 2006 - 02:57:21 GMT

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@fhcrc.org> wrote:
> Ben Bolker <bolker@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@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@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

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

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Sun Dec 17 16:52:19 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Wed 20 Dec 2006 - 08:31:03 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.