From ripley at stats.ox.ac.uk  Sat Oct 15 09:02:56 2005
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Sat, 15 Oct 2005 08:02:56 +0100 (BST)
Subject: [Rd] extending lattice to S4 classes
In-Reply-To: <434FD8C2.205@ipimar.pt>
References: <434F88B9.1020600@ipimar.pt> <434FD8C2.205@ipimar.pt>
Message-ID: <Pine.LNX.4.61.0510150758480.27345@gannet.stats>

I think you are confusing us:  xyplot is an S3 generic with no 'data' 
argument.  It is xyplot.formula that you want to add dispatch on its 
'data' argument.  I don't really see why you want to mix S3 and S4 
systems, but you could make xyplot.formula an S3 or S4 generic and 
dispatch on 'data', just as you did earlier with xyplot.

Other xyplot methods need not (and probably do not) have a 'data' 
argument.

On Fri, 14 Oct 2005, ernesto wrote:

> ernesto wrote:
>
>> Hi,
>>
>> I'm writing methods for a package called FLCore (see
>> http://flr-project.org/) in particular for a class called "FLQuant"
>> which extends array.
>>
>> Previously I was able to write methods based on the class of "data" but
>> now I can not do it due to the single parameter "x". Is there a way to
>> do this ?

> I found an hack (see below) to make it work but it's terrible and hugly
> ... some suggestions are welcome. It simply tests if data belongs to
> class "FLQuant" and transforms it into a data.frame before ploting.
>
> Regards
>
> EJ
>
> if (!isGeneric("xyplot")) {
>    setGeneric("xyplot", useAsDefault = xyplot)
> }
>
>
> setMethod("xyplot", signature("formula"), function(x, ...){
>
>    dots <- list(...)
>    if(class(dots$data)=="FLQuant") dots$data <- as.data.frame(dots$data)
>    call.list <- c(x = x, dots)
>
> # needed this to avoid an infinite loop because xyplot is defined only
> for "x"
>    xyplot <- lattice::xyplot
>    ans <- do.call("xyplot", call.list)
>    ans$call <- match.call()
>    ans
>
> })

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



[Rd] extending lattice to S4 classes
Prof Brian Ripley