Re: [Rd] setMethod("Summary")

From: Parlamis Franklin <fparlamis_at_mac.com>
Date: Mon 04 Sep 2006 - 18:58:36 GMT

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



R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue Sep 05 08:21:12 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 06 Sep 2006 - 11:39:24 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.