[R] setMethod confusion -best reference for S4 programming
Berton Gunter
gunter.berton at gene.com
Wed Mar 15 17:34:48 CET 2006
You might also wish to read the relevant chapter of V&R's S PROGRAMMING.
-- Bert Gunter
Genentech Non-Clinical Statistics
South San Francisco, CA
"The business of the statistician is to catalyze the scientific learning
process." - George E. P. Box
> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch
> [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of
> Stephen Henderson
> Sent: Wednesday, March 15, 2006 4:28 AM
> To: r-help at stat.math.ethz.ch
> Cc: Henrik Bengtsson; Martin Maechler
> Subject: Re: [R] setMethod confusion -best reference for S4
> programming
>
> Thanks I think you have both answered my question (reckon Ill go S3 on
> that). As an adjunct to this do you know what might be the best
> reference to the S4 methods current implementation.
>
> I have ordered the Chambers book "Programming with Data", and I have a
> short tutorial-- "S4 Classes in 15 pages, more or less".
>
> Have I missed any other useful resources?
>
> Stephen Henderson
> Wolfson Inst. for Biomedical Research
> Cruciform Bldg., Gower Street
> University College London
> United Kingdom, WC1E 6BT
> +44 (0)207 679 6827
>
>
> -----Original Message-----
> From: henrik.bengtsson at gmail.com
> [mailto:henrik.bengtsson at gmail.com] On
> Behalf Of Henrik Bengtsson
> Sent: 15 March 2006 10:59
> To: Martin Maechler
> Cc: Stephen Henderson; r-help at stat.math.ethz.ch
> Subject: Re: [R] setMethod confusion
>
> On 3/15/06, Martin Maechler <maechler at stat.math.ethz.ch> wrote:
> > >>>>> "Stephen" == Stephen Henderson <s.henderson at ucl.ac.uk>
> > >>>>> on Tue, 14 Mar 2006 16:32:56 -0000 writes:
> >
> > Stephen> Hello I've checked through previous postings but
> > Stephen> don't see a fully equivalent problem-just a few
> > Stephen> hints. I have been trying to set a new method for
> > Stephen> the existing function "table" or
> > Stephen> "as.data.frame.table" for my class "tfSites".
> > Stephen> Taking out all the useful code and just returning
> > Stephen> the input class I get the error
> >
> > >> setMethod("table", "tfSites", function(.Object) .Object)
> >
> > Stephen> Error in conformMethod(signature, mnames, fnames,
> > Stephen> f) : In method for function "table": formal
> > Stephen> arguments omitted in the method definition cannot
> > Stephen> be in the signature (exclude = "tfSites")
> >
> >
> > >> setMethod("as.data.frame.table", "tfSites",
> > >> function(.Object) .Object )
> >
> > Stephen> Error in conformMethod(signature, mnames, fnames,
> > Stephen> f) : In method for function "as.data.frame.table":
> > Stephen> formal arguments omitted in the method definition
> > Stephen> cannot be in the signature (x = "tfSites")
> >
> > Stephen> What does this mean? Is there something peculiar
> > Stephen> about the table function? Is it because it takes
> > Stephen> arguments beginning table(..., etc)
> >
> > Yes. Since table's argument list starts with "..."
> > you cannot directly write S4 methods for it.
>
> Although not fully tested, but a workaround could be to i) define an
> S4 method tableS4(), then ii) rename table() to table.default() and
> iii) make table() an S3 generic function, and finally iv) define
> table.tfSites() to call tableS4(). Would this work? If so, step
> (ii)-(iv) can be done in one step using the R.oo package. Example:
>
> library(R.oo)
> setClass("fSites", representation(x="numeric", y="numeric"))
> setGeneric("tableS4", function(.Object, ...)
> standardGeneric("tableS4"))
> setMethod("tableS4", "fSites", function(.Object) .Object)
> setMethodS3("table", "fSites", function(.Object, ...) tableS4(.Object,
> ...))
>
> Test;
> > x <- new("fSites")
> > table(x)
> An object of class "fSites"
> Slot "x":
> numeric(0)
>
> Slot "y":
> numeric(0)
>
> > X <- rpois(20, 1)
> > table(X)
> X
> 0 1 2 3
> 10 7 2 1
>
> But, what's wrong with S3 in the first place? ;)
>
> /Henrik
>
>
>
>
> > One could consider changing table's argument list to become
> > (x, ..., exclude = c(NA, NaN), dnn = list.names(...),
> deparse.level
> = 1)
> > but that's not entirely trivial to do back compatibly, since
> > table() produces *named* dimnames from its arguments in "..."
> > and we'd want to make sure that this continues to work as now
> > even when the first argument is formally named 'x'. E.g.,
> >
> > > X <- rpois(20, 1)
> > > table(X)
> > X
> > 0 1 2 3
> > 7 10 2 1
> > >
> >
> > should continue to contain "X" as names(dimnames(.)).
> >
> > Of course this has now become a topic for R-devel rather
> > than R-help.
> >
> > Martin Maechler,
> > ETH Zurich
> >
> > ______________________________________________
> > R-help at stat.math.ethz.ch mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide!
> http://www.R-project.org/posting-guide.html
> >
> >
>
>
> --
> Henrik Bengtsson
> Mobile: +46 708 909208 (+1h UTC)
>
> **********************************************************************
> This email and any files transmitted with it are
> confidentia...{{dropped}}
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide!
> http://www.R-project.org/posting-guide.html
>
More information about the R-help
mailing list