From fparlamis at mac.com  Mon Sep  4 20:58:36 2006
From: fparlamis at mac.com (Parlamis Franklin)
Date: Mon, 4 Sep 2006 08:58:36 -1000
Subject: [Rd] setMethod("Summary")
In-Reply-To: <C7B9E5CB-E340-445D-A5B9-FC86AB6CC1DE@soc.soton.ac.uk>
References: <C7B9E5CB-E340-445D-A5B9-FC86AB6CC1DE@soc.soton.ac.uk>
Message-ID: <C4E5D78B-28AB-4A25-8112-3668F31444E4@mac.com>

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




[Rd] setMethod("Summary")
Parlamis Franklin