On Wed, Aug 1, 2012 at 7:31 AM, Gabor Grothendieck <[email protected]> wrote: > On Wed, Aug 1, 2012 at 12:40 AM, Gene Leynes <[email protected]> wrote: >> Achim, >> >> Thank you for your response, and for your work on the zoo package in >> general. Also, that implementation of the color scheme looks great. >> >> Frankly, I can't remember exactly what I was originally trying to >> accomplish for this particular problem, but I think that your suggestion of >> reviewing the plotting section of the zoo vignette would solve the problem. >> Calculating the colors ahead of time and passing them in as a list is >> great solution that I didn't know was possible. >> >> I still have some lingering questions about the panel function, which has >> been one of those things in R that I would like to understand better. >> >> Using your example, I would like to be able to pass in an additional >> variable to make each set of hues like this: >> >> mycol <- function(i, v) hcl( >> h = ifelse(i > 0, v, 0), >> c = 80 * abs(i)^1.5, >> l = 90 - 60 * abs(i)^1.5) >> >> mypanel <- function(x, y, v, ...) { >> lines(x, y, col = "gray") >> points(x, y, col = mycol(y / max(abs(y)), v), pch = 19) >> } >> plot(zobj, panel = mypanel, v=0) >> plot(zobj, panel = mypanel, v=50) >> plot(zobj, panel = mypanel, v=100) >> plot(zobj, panel = mypanel, v=150) >> >> >> This runs, but generates warnings. I was trying to find the right way to >> pass additional arguments to panel. >> >> I was trying things like this: >> plot(zobj, panel = mypanel(x, y, v=150)) >> plot(zobj, panel = mypanel(..., v=150)) >> >> >> I was surprised at how many ways I could call panel, but how unpredictable >> (to me) the results were! Things that I didn't think would work were ok, >> and other things that seemed correct would threw errors. >> >> If you have some insight I would like to hear it, but this isn't that >> important because there are obviously other approaches for making the same >> / similar output. >> > > As documented in ?plot.zoo the ... argument consists of graphical > parameters so its not just passed to the panel function -- you can > expect warnings if, as here, the parameters are not graphical (as they > are passed to other functions and not just the panel function). > > What you can do is to create a panel constructor that uses lexical > scoping to encapsulate the additional parameters: > > make.mypanel <- function(v) function(...) mypanel(..., v) > plot(zobj, panel = make.mypanel(v=0) ) > > Here make.mypanel constructs a mypanel function with the v argument > filled in so you don't have to separately pass it via ... .
One further idea that will save you from defining a constructor function is to use Curry from the functional package like this: library(functional) plot(zobj, panel = Curry(mypanel, v=0) ) Here Curry returns mypanel but with v filled in already. -- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com ______________________________________________ [email protected] 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.

