question about trailing arguments in an S4 method
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