On 10/11/06, Benjamin Tyner <[EMAIL PROTECTED]> wrote: > In qqmath, how would one go about having 'distribution' change with > panel.number? I've tried > > set.seed(1) > mydata <- data.frame(ind = factor(rep(2:4, each = 100))) > mydata$val <- rt(300, df=rep(2:4, each = 100)) > > > plot<-qqmath(~ val | ind, > layout=c(3,1), > data = mydata, > prepanel = function(x, distribution, ...) { > mydist<-function(p) qt(p, df = panel.number() + 1) > prepanel.qqmathline(x, distribution=mydist,...) > }, > panel = function(x, distribution, ...) { > mydist<-function(p) qt(p, df = panel.number() + 1) > panel.qqmathline(x, distribution=mydist,...) > panel.qqmath(x, distribution=mydist,...) > })
You have the right idea, but prepanel is called in a context (when the object is being created) that is fundamentally different from when panel is called (when the object is being plotted). In particular, panel.number() makes no sense in the first context. packet.number() does, but implementation will be non-trivial. Since I don't expect this to be a very common use, I'm not going to even try, but you can fake it by using the hack that originally gave rise to the 'panel.number' concept, namely, keep an external counter. One solution which does not pollute the search path is: lattice.options(counter = 1) qqmath(~ val | ind, layout=c(3,1), data = mydata, prepanel = function(x, distribution, ...) { counter <- lattice.getOption("counter") mydist <- function(p) qt(p, df = counter + 1) lattice.options(counter = counter + 1) prepanel.qqmathline(x, distribution=mydist,...) }, panel = function(x, distribution, ...) { mydist <- function(p) qt(p, df = panel.number() + 1) panel.qqmathline(x, distribution=mydist,...) panel.qqmath(x, distribution=mydist,...) }) -Deepayan ______________________________________________ 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 and provide commented, minimal, self-contained, reproducible code.