From r.hankin at noc.soton.ac.uk  Tue Sep  5 09:58:23 2006
From: r.hankin at noc.soton.ac.uk (Robin Hankin)
Date: Tue, 5 Sep 2006 08:58:23 +0100
Subject: [Rd] setMethod("Summary")
In-Reply-To: <C4E5D78B-28AB-4A25-8112-3668F31444E4@mac.com>
References: <C7B9E5CB-E340-445D-A5B9-FC86AB6CC1DE@soc.soton.ac.uk>
	<C4E5D78B-28AB-4A25-8112-3668F31444E4@mac.com>
Message-ID: <E28E6E71-5DD8-4B38-81C9-BB6014F6C16E@soc.soton.ac.uk>

Dear Franklin


thank you for this.


Your suggestion works.  But now I'm confused because I'm not sure how  
the
setGeneric() call actually helps.

If I source:

setClass("brob",
          representation = representation 
(x="numeric",positive="logical"),
          prototype      = list(x=numeric(),positive=logical())
          )


max.brob <- function(..., na.rm=FALSE){stop("not YET implemented")}


---ie no call to setGeneric()--- then in an R session I can do the  
following:


R> x <- new("brob",x=6,positive=T)
R> max(x)
Error in max.brob(..., na.rm = na.rm) : not YET implemented


So max(x) calls max.brob() as intended.  Why would a call to  
setGeneric()
be desirable here?  What do I gain from it?


thanks again


Robin




On 4 Sep 2006, at 19:58, Parlamis Franklin wrote:

> 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.
>>
[snipped]


--
Robin Hankin
Uncertainty Analyst
National Oceanography Centre, Southampton
European Way, Southampton SO14 3ZH, UK
  tel  023-8059-7743




[Rd] setMethod("Summary")
Robin Hankin