volker.franz@tuebingen.mpg.de
2002-Dec-16 14:32 UTC
[Rd] Lattice: panel.superpose function does not pass subscripts and groups arguments (PR#2377)
Full_Name: Volker Franz Version: 1.5.1 OS: Debian-Linux Submission from: (NULL) (134.176.77.64) Hi, working with the panel.superpose function, I found out that this function does not pass the subscripts and groups arguments to panel.groups functions. In my view, this seems an unnecessary restriction, because the subscripts-mechanism which allows to access the original data should also work if we use the panel.superpose function. (see, "A Tour of Trellis Graphics": "the subscripts argument is a numeric vector that tells which observation in the original data is associated with the x- and y- values"; section 3.2). The following patch is for the panel.superpose function of the lattice library. It ensures that the subscripts and the groups arguments are passed correctly to panel.groups functions. For illustration, I append an example which only works with the patch... Best Volker ###################################################################### ##Patch ##(this is patched against /usr/lib/R/library/lattice/R/lattice in ##Debian; in the .tar.gz version, the target file is: panels.R) ## ##Description: ## Package: lattice ## Version: 0.5-3 ## Date: 2002/05/30 ## Priority: recommended ## Title: Lattice Graphics ## Author: Deepayan Sarkar <deepayan@stat.wisc.edu> ## Maintainer: Deepayan Sarkar <deepayan@stat.wisc.edu> ## Description: Implementation of Trellis Graphics ## Depends: R (>= 1.5.0), grid (>= 0.6), modreg ## License: GPL version 2 or later ## Built: R 1.5.1; i386-pc-linux-gnu; Mon Jul 15 21:40:24 CDT 2002 ## ##Note: I just checked: the problem also exists in version, 0.6-6) ###################################################################### --- lattice.orig Tue Jul 16 04:40:24 2002 +++ lattice Sun Dec 15 22:46:18 2002 @@ -3995,6 +3995,8 @@ id <- (groups[subscripts] == vals[i]) if (any(id)) { args <- list(x=x[id], + subscripts = subscripts[id], + groups = groups, pch = pch[i], cex = cex[i], col.line = col.line[i], col.symbol = col.symbol[i], ###################################################################### ##Example: This is the patched panel.superpose function: ###################################################################### panel.superpose <- function(x, y = NULL, subscripts, groups, panel.groups = "panel.xyplot", col, col.line = superpose.line$col, col.symbol = superpose.symbol$col, pch = superpose.symbol$pch, cex = superpose.symbol$cex, lty = superpose.line$lty, lwd = superpose.line$lwd, ...) { if (length(x)>0) { if (!missing(col)) { if (missing(col.line)) col.line <- col if (missing(col.symbol)) col.symbol <- col } superpose.symbol <- trellis.par.get("superpose.symbol") superpose.line <- trellis.par.get("superpose.line") x <- as.numeric(x) if (!is.null(y)) y <- as.numeric(y) vals <- sort(unique(groups)) nvals <- length(vals) col.line <- rep(col.line, length=nvals) col.symbol <- rep(col.symbol, length=nvals) pch <- rep(pch, length=nvals) lty <- rep(lty, length=nvals) lwd <- rep(lwd, length=nvals) cex <- rep(cex, length=nvals) panel.groups <- if (is.function(panel.groups)) panel.groups else if (is.character(panel.groups)) get(panel.groups) else eval(panel.groups) for (i in seq(along=vals)) { id <- (groups[subscripts] == vals[i]) if (any(id)) { args <- list(x=x[id], subscripts = subscripts[id], groups = groups, pch = pch[i], cex = cex[i], col.line = col.line[i], col.symbol = col.symbol[i], lty = lty[i], lwd = lwd[i], ...) if (!is.null(y)) args$y=y[id] do.call("panel.groups", args) } } } } ###################################################################### ##Example: Draw a nice figure with errorbars/conf.intervalls...: ###################################################################### library(lattice) data(barley) barley$variety <- as.numeric(barley$variety) barley$yield.se <- abs(rnorm(length(barley$yield),sd=3))#Simulate standard errors print(xyplot(yield ~ variety | site, data = barley, groups = year, ses = barley$yield.se, type="p", panel = function(x,y, ...) { panel.superpose(x,y, ...) panel.superpose(x,y, panel.groups=function(x,y,subscripts,groups,ses,col.symbol,...){ cat("Call to selfdefined panel.groups function by panel.superpose:\n") cat(" length(x)= ",length(x)," x=",x,"\n") cat(" length(y)= ",length(y)," y=",y,"\n") cat(" length(groups)= ",length(groups)," groups=",groups,"\n") cat(" length(ses)= ",length(ses)," ses=",ses,"\n") cat(" length(subscripts)",length(subscripts)," subscripts=",subscripts,"\n") cat(" groups[subscripts]",groups[subscripts],"\n") cat(" ses[subscripts]= ",ses[subscripts],"\n") larrows(x,y,x,y+ses[subscripts],col=col.symbol,angle=90,proportion=0.05) larrows(x,y,x,y-ses[subscripts],col=col.symbol,angle=90,proportion=0.05) },...) })) ###################################################################### --please do not edit the information below-- Version: platform = i386-pc-linux-gnu arch = i386 os = linux-gnu system = i386, linux-gnu status = major = 1 minor = 5.1 year = 2002 month = 06 day = 17 language = R Search Path: .GlobalEnv, package:ctest, package:lattice, package:grid, package:nlme, package:nls, Autoloads, package:base
deepayan@stat.wisc.edu
2002-Dec-18 23:35 UTC
[Rd] Lattice: panel.superpose function does not pass subscripts and groups arguments (PR#2377)
I've added this in the development version. -Deepayan On Monday 16 December 2002 07:32 am, volker.franz@tuebingen.mpg.de wrote:> Full_Name: Volker Franz > Version: 1.5.1 > OS: Debian-Linux > Submission from: (NULL) (134.176.77.64) > > > Hi, > > working with the panel.superpose function, I found out that this > function does not pass the subscripts and groups arguments to > panel.groups functions. > > In my view, this seems an unnecessary restriction, because the > subscripts-mechanism which allows to access the original data should > also work if we use the panel.superpose function. (see, "A Tour of > Trellis Graphics": "the subscripts argument is a numeric vector that > tells which observation in the original data is associated with the x- > and y- values"; section 3.2). > > The following patch is for the panel.superpose function of the lattice > library. It ensures that the subscripts and the groups arguments are > passed correctly to panel.groups functions. > > For illustration, I append an example which only works with the > patch... > > Best > Volker[...]