[R] Groups and bwplot

Weidong Gu anopheles123 at gmail.com
Sat Aug 20 17:38:05 CEST 2011


You may want to consult a recent post by Felix
(https://stat.ethz.ch/pipermail/r-help/2011-August/286707.html) on how
to pass group parameter.

Weidong Gu

On Sat, Aug 20, 2011 at 6:59 AM, Sébastien Bihorel <pomchip at free.fr> wrote:
> Dear R-users,
>
> A while ago, Deepayan Sarkar suggested some code that uses the group
> argument in bwplot to create some 'side-by-side' boxplots
> (https://stat.ethz.ch/pipermail/r-help/2010-February/230065.html). The
> example he gave was relatively specific and I wanted to generalize his
> approach into a function. Unfortunately, I seem to have some issues
> passing the correct arguments to the panel function, and would greatly
> appreciate any suggestions to solve these issues:
>
> require(lattice)
>
> mybwplot <- function(x,y,data,groups){
>
>  if (missing(groups)||is.null(groups)) {
>    groups <- NULL
>    ngroups <- 1
>  } else {
>    data[[groups]] <- as.factor(data[[groups]])
>    ngroups <- nlevels(data[[groups]])
>  }
>  mywidth <- 1/(ngroups+1)
>
>  mypanel <- function(x,y,groups,...){
>    if (missing(groups)||is.null(groups)) {
>      panel.bwplot(x,y,...)
>    } else {
>      panel.superpose(x,y,...)
>    }
>  }
>
>  mypanel.groups <- function(x,y,groups,ngroups,...){
>    if (missing(groups)||is.null(groups)){
>      NULL
>    } else {
>      function(x, y, ..., group.number) {
>        panel.bwplot(x+(group.number-0.5*(ngroups+1))/(ngroups+1),y, ...)}
>    }
>  }
>
>  bwplot(formula(paste(y,x,sep=' ~ ')),
>       data = data,
>       groups = 'Plant',
>       ngroups=ngroups,
>       pch = "|",
>       box.width = mywidth,
>       panel = mypanel,
>       panel.groups = mypanel.groups)
>
> }
>
> myCO2 <- CO2
> myCO2$year <- 2011
> summary(myCO2)
>
> mybwplot('Type','uptake',myCO2) # works
>
> mybwplot('Type','uptake',myCO2,'Treatment') # Error using packet 1,
> 'x' is missing
>
> mybwplot('Type','uptake',myCO2,'year') # Error using packet 1, 'x' is missing
>
> # Deepayan Sarkar suggested code (adapted to myC02)
> # bwplot(uptake ~ Plant, data = myCO2, groups = Treatment,
> #        pch = "|", box.width = 1/3,
> #        panel = panel.superpose,
> #        panel.groups = function(x, y, ..., group.number) {
> #            panel.bwplot(x + (group.number-1.5)/3, y, ...)
> #        })
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



More information about the R-help mailing list