Deepayan Sarkar wrote: >On 10/18/05, ernesto <[EMAIL PROTECTED]> wrote: > > >>Prof Brian Ripley wrote: >> >> >> >>>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 >>>> >>>>}) >>>> >>>> >>> >>> >>Hi, >> >>Sorry to get back to this problem so late. >> >>I want to use lattice plots for an array. In this specific case this >>array is of class FLQuant which is defined by package FLCore. >> >>This array has 5 dimensions age, year, unit, season and area. My aim is >>to use formula to define what to plot and what to condition on. So >>procedures like used for barchart.table are not usefull for me because >>the user loses the option of defining the model to plot. >> >>With the previous version of lattice I was able to use formula and data >>to dispatch. So I defined S4 generic methods for most high level methods >>(bwplot, stripplot, dotplot, xyplot, histogram, etc) and simply >>transform FLQuant objects into dataframes that were passed to the >>lattice methods. No harm done to other data objects. >> >>With the new version only one object is available for dispatching "x" so >>if I define some xyplot.FLQuant I will miss the formula argument. >> >>My question is if there is a way of doing this or not. >> >> > >Prof Ripley gave you one (redefine xyplot.formula etc). You could >always add new arguments to your methods, so you could have (the S4 >equivalent of) > >xyplot.FLQuant <- function(x, formula, ...) >{ > xyplot(formula, data = as(x, "data.frame"), ...) >} > >and then call > >xyplot(flq.obj, formula = y ~ x, [...]) > >The cleanest solution would be to have a data argument in the xyplot >generic (with the expectation that it could be non-missing only for >methods where x is a formula). I'll try to implement that and see if >it causes any problems. > >Deepayan > > Hi Deepayan,
I see that there are alternatives, I found one my self that works and it's transparent for the user. I don't want to implement solutions that force the user to use lattice methods differently from your implementation. The cleanest solution as you say is to add a data argument to xyplot but I can't do it so I would not propose it. Regards EJ ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel