From: Ernesto Jardim <ernesto_at_ipimar.pt>

Date: Fri 26 Aug 2005 - 19:15:01 EST

R-help@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 Received on Fri Aug 26 19:22:24 2005

Date: Fri 26 Aug 2005 - 19:15:01 EST

Deepayan Sarkar wrote:

>On 8/24/05, ernesto <ernesto@ipimar.pt> wrote:

*>
**>
**>>Hi,
**>>
**>>I'm trying to develop an histogram method for a class called "FLQuant"
**>>which is used by the package FLCore (http://flr-project.org). FLQuant is
**>>an extension to "array". There is an as.data.frame method that coerces
**>>flquant into a data.frame suitable for lattice plotting. The problem is
**>>that when I coerce the object and plot it after it works but if the
**>>method is applied within the histogram method it does not work. See the
**>>code below (the FLCore package is here
**>>http://prdownloads.sourceforge.net/flr/FLCore_1.0-1.tar.gz?download)
**>>
**>>
**>>
**>>>library(FLCore)
**>>>
**>>>
**>>Loading required package: lattice
**>>
**>>
**>>>data(ple4)
**>>>histogram(~data|year, data=ple4@catch.n)
**>>>
**>>>
**>>Error in inherits(x, "factor") : Object "x" not found
**>>
**>>
**>>>histogram(~data|year, data=as.data.frame(ple4@catch.n))
**>>>
**>>>
**>>The catch.n slot is a FLQuant object and the code for histogram is the
**>>following
**>>
**>>setMethod("histogram", signature(formula="formula", data="FLQuant"),
**>> function (formula, data = parent.frame(), allow.multiple =
**>>is.null(groups) || outer,
**>> outer = FALSE, auto.key = FALSE, aspect = "fill", panel =
**>>"panel.histogram", prepanel = NULL,
**>> scales = list(), strip = TRUE, groups = NULL, xlab, xlim, ylab,
**>>ylim,
**>> type = c("percent", "count", "density"),
**>> nint = if (is.factor(x)) length(levels(x)) else
**>>round(log2(length(x)) + 1),
**>> endpoints = extend.limits(range(x[!is.na(x)]), prop = 0.04),
**>> breaks = if (is.factor(x)) seq(0.5, length = length(levels(x)) +
**>>1) else do.breaks(endpoints, nint),
**>> equal.widths = TRUE, drop.unused.levels =
**>>lattice.getOption("drop.unused.levels"), ...,
**>> default.scales = list(), subscripts = !is.null(groups), subset =
**>>TRUE) {
**>>
**>> qdf <- as.data.frame(data)
**>>
**>> histogram(formula, data = qdf, allow.multiple = allow.multiple,
**>>outer = outer,
**>> auto.key = auto.key, aspect = aspect, panel = panel,
**>>prepanel = prepanel, scales = scales,
**>> strip = strip, groups = groups, xlab=xlab, xlim=xlim,
**>>ylab=ylab, ylim=ylim, type = type,
**>> nint = nint, endpoints = endpoints, breaks = breaks,
**>>equal.widths = equal.widths,
**>> drop.unused.levels = drop.unused.levels, ..., default.scales
**>>= default.scales,
**>> subscripts = subscripts, subset = subset)
**>> }
**>>)
**>>
**>>
**>>Any ideas ?
**>>
**>>
**>
**>[I'm CC-ing to r-devel, please post follow-ups there]
**>
**>What version of lattice are you using? Please use the latest one, in
**>which histogram is an S3 generic, with only one argument, formula. The
**>eventual solution to your problem may involve changing that, but the
**>first question to ask is whether any other formula makes sense in your
**>context (if not, I would rather keep one argument and dispatch on
**>signature(formula = "FLQuant").
**>
**>Disclaimer: I haven't actually had time to check out FLCore yet, I
**>will as soon as I can.
**>
**>Deepayan
**>
**>
*

Hi,

I've installed the version that is distributed with R-2.1.1, 0.11-8. I see there's a new version now so I'll install it and check the results. I've developed the code a little more using the approach you use for dotplot (see below) and I know where the problem is now. I'm not able to pass the argument nint, breaks and endpoints to the function call. I guess the problem is my programming skils :-(

Thanks

EJ

ps: I'm not a subscriber of r-devel so I guess I'm not able to post there, anyway I'm CC-ing there too.

setMethod("histogram", signature(formula="formula", data="FLQuant"), function (formula, data = parent.frame(), allow.multiple = is.null(groups) || outer, outer = FALSE, auto.key = FALSE, aspect = "fill", panel = "panel.histogram", prepanel = NULL, scales = list(), strip = TRUE, groups = NULL, xlab, xlim, ylab, ylim, type = c("percent", "count", "density"), nint = if (is.factor(x)) length(levels(x)) else round(log2(length(x)) + 1), endpoints = extend.limits(range(x[!is.na(x)]), prop = 0.04), breaks = if (is.factor(x)) seq(0.5, length = length(levels(x)) + 1) else do.breaks(endpoints, nint), equal.widths = TRUE, drop.unused.levels = lattice.getOption("drop.unused.levels"), ..., default.scales = list(), subscripts = !is.null(groups), subset = TRUE) {

# need to develop further, at the moment is not possible to control nint, breaks and endpoints.

data <- as.data.frame(data)

dots <- list(...)

groups <- eval(substitute(groups), data, parent.frame()) subset <- eval(substitute(subset), data, parent.frame())

call.list <- c(list(formula = formula, data = data, groups = groups, subset = subset, allow.multiple = allow.multiple, outer = outer, auto.key = auto.key, aspect = aspect, panel = panel, prepanel = prepanel, scales = scales, strip = strip, type = type, equal.widths = equal.widths, drop.unused.levels = drop.unused.levels, default.scales = default.scales, subscripts = subscripts), dots)

# include xlab & co if existent

if(!missing(xlab)) call.list$xlab <- xlab if(!missing(ylab)) call.list$ylab <- ylab if(!missing(xlim)) call.list$xlim <- xlim if(!missing(ylim)) call.list$ylim <- ylim

ans <- do.call("histogram", call.list)

ans$call <- match.call()

ans

})

R-help@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 Received on Fri Aug 26 19:22:24 2005

*
This archive was generated by hypermail 2.1.8
: Sun 23 Oct 2005 - 15:58:23 EST
*