[R] Expressions in lattice conditional variables

Peter Ehlers ehlers at ucalgary.ca
Sat Mar 2 21:29:40 CET 2013


Frank,

As you probably realize, the problem is not with lattice but with
unique (actually: .Internal(unique, ...)):

   unique(expression('a','b','b'))

generates your error.

Lattice needs a factor variable for the panels, and it tries to
use unique() on your 'vn' to do that.

For example, if you replace '|vn' with '|as.character(vn)', you'll
get the plot, but of course the strip labels are a mess.

I'm not sure that I understand your need correctly, but if it's
a matter of creating the strip labels, then I would explore using
the factor.levels argument to strip.default().

I hope that this isn't totally out to lunch.

Peter Ehlers

On 2013-03-02 09:20, Frank Harrell wrote:
> Whoops - these 2 lines should have been omitted from the program:
>
> n <- sprintf('%s      (n%s=%g, n%s=%g)', v, nam[1],n[1], nam[2],n[2])
>   vn[var == v] <- n
>
>
> Frank Harrell wrote
>> I would like to have a lattice conditioning ( | var ) variable have
>> expression() as values because I want panel labels to be able to use
>> plotmath notation for subscripts, etc.   lattice barks at this.  Does
>> anyone know of a trick workaround?  An attempted example program is below.
>> Thanks -Frank
>>
>> require(lattice)
>> set.seed(1)
>> var <- c(rep('A', 100), rep('B', 100))
>> trt <- sample(c('T1','T2'), 200, TRUE)
>> x <- c(runif(100), 10*runif(100))
>> y <- x + c(runif(100)/10, runif(100))
>> N <- tapply(x, llist(var, trt), function(x) sum(!is.na(x)))
>> print(N)
>>
>> vn <- vector('expression', length(var))
>> for(v in unique(var)) {
>>    i <- var == v
>>    n <- tapply(!is.na(x[i]), trt[i], sum)
>>    nam <- names(n)
>>    w <- sprintf('paste(%s,"     (", n[%s]==%g,~~n[%s]==%g,")")',
>>                 v, nam[1], n[1], nam[2], n[2])
>>    cat(w, '\n')
>>    vn[var == v] <- parse(text=w)
>>    n <- sprintf('%s      (n%s=%g, n%s=%g)', v, nam[1],n[1], nam[2],n[2])
>>    vn[var == v] <- n
>> }
>> trt <- factor(trt)
>>
>> xyplot(as.integer(trt) ~ x | vn, panel=panel.bpplot, ylim=c(0,3),
>>         scale=list(y=list(at=1:2, labels=levels(trt)),
>>           x=list(relation='free', limits=list(c(0,1),c(0,13)))),
>>         ylab='Treatment', layout=c(1,2))
>>
>> Error in unique.default(x) :
>>    unimplemented type 'expression' in 'HashTableSetup'
>
>
>
>
>
> -----
> Frank Harrell
> Department of Biostatistics, Vanderbilt University
> --
> View this message in context: http://r.789695.n4.nabble.com/Expressions-in-lattice-conditional-variables-tp4660089p4660090.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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