i believe, if the function you are trying to work with has "..." as
the first formal argument (as do most if not all of the "Summary"
group functions), you will need to redefine the generic in order to
provide a "real" S4 argument on which to dispatch.
the following works for me (IIRC it was martin who initially pointed
me in this direction, so any thanks are his).
setGeneric("max", function(x, ..., na.rm = FALSE)
{
standardGeneric("max")
},
useAsDefault = function(x, ..., na.rm = FALSE)
{
base::max(x, ..., na.rm = na.rm)
},
group = "Summary")
i don't have bleeding edge devel version installed, so i am not sure
whether recent changes to S4 have mooted the above.
(also, i thought i sent this last week, but i may have neglected to
make it plain text, so maybe you didn't get it)
franklin parlamis
On Sep 4, 2006, at 3:47 AM, Robin Hankin wrote:
> Hi everyone and thanks for being patient. I've used
"!.foo"() et
> seq pro tem.
>
> Next problem: how to define "Summary" methods for brobs.
>
> ?max says
>
> 'max' and 'min' are generic functions: methods can be
defined for
> them individually or via the 'Summary' group generic. For
> this to
> work properly, the arguments '...' should be unnamed.
>
> OK, so what is the correct procedure to make sum() operate on brob
> objects?
>
> My best effort follows.
>
>
>
> setClass("brob",
> representation = representation
> (x="numeric",positive="logical"),
> prototype = list(x=numeric(),positive=logical())
> )
>
>
> .Brob.max <- function(...){
> stop("not yet impemented")
> }
>
>
> setMethod("Summary", signature("brob"),
> function(...){
> switch(.Generic,
> max = .Brob.max(...),
> stop(paste(.Generic, "not implemented yet "))
> )
> }
> )
>
>
> but this gives an error from conformMethod().
>
> [I've left the arguments to signature() unnamed because ?
> GenericFunctions
> says
>
> A signature is
> a named or unnamed vector of character strings. If named,
> the names must be formal argument names for the generic
> function. If 'signature' is unnamed, the default is to
use
> the first 'length(signature)' formal arguments of the
> function.
>
> which seems to tell me (in conjunction with the advice from
> Extremes.Rd quote above)
> to use unnamed arguments to signature()
> ]
>
>
> What is the correct way to make sum(x) call .Brob.max() if x is a
> "brob" object?
> Or is is it better to define a sum.brob() function and use that?
>
>
>
> --
> Robin Hankin
> Uncertainty Analyst
> National Oceanography Centre, Southampton
> European Way, Southampton SO14 3ZH, UK
> tel 023-8059-7743
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel