Thanks for your input and this link. I realize that there was a typo
in my example code that impacted the group argument... That's king of
stupid.

However, even with the implementation of Felix's syntax, the "Error
using packet 1, 'x' is missing" error message is still displayed, even
if the call appears correct. So I believe that group argument in not
the issue but rather my panel functions. (Plus, Felix's notation
creates side-issues such as the calculation of ngroups, which I have
hard-coded in the following modified example).

require(lattice)

mybwplot <- function(x,data,groups){

  if (missing(groups)) {
    ngroups <- 1
  } else {
    ngroups <- 2
  }

  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,group.number,...){
    if (missing(groups)||is.null(groups)){
      NULL
    } else {
      panel.bwplot(x+(group.number-0.5*(ngroups+1))/(ngroups+1),y, ...)
    }
  }

  ccall <- quote(bwplot(x,
                        data = data,
                        ngroups=ngroups,
                        pch = "|",
                        box.width = mywidth,
                        panel = mypanel,
                        panel.groups = mypanel.groups))
  ccall$groups <- substitute(groups)
  str(ccall)
  eval(ccall)

}

myCO2 <- CO2
myCO2$year <- 2011

mybwplot(uptake~Type,myCO2) # works

mybwplot(uptake~Type,myCO2,groups=Treatment) # Error using packet 1,
'x' is missing

#mybwplot(uptake~Type,myCO2,groups=year) # Error using packet 1, 'x' is missing

# Deepayan Sarkar suggested code (adapted to myC02)
# bwplot(uptake ~ Type, 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, ...)
#        })

On Sat, Aug 20, 2011 at 11:38 AM, Weidong Gu <anopheles...@gmail.com> wrote:
> 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 <pomc...@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@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.
>>
>

______________________________________________
R-help@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.

Reply via email to