On May 25, 2011, at 5:56 PM, Gene Leynes wrote:

David, Peter (and others),

If you're interested, I submitted this as a bug, and was informed of the error of my ways by Professor Ripley
* His informative reply is copied below. *

The short answer is that panel.first is not a documented function of "plot.formula", which is called by the generic "plot".


Apparently not the first time he has been called upon to do so. Here is a similar question, albeit with no answer (at least in Baron's archive) at that time.

http://finzi.psych.upenn.edu/Rhelp10/2009-September/210328.html

(... the link to the ancient bug is broken.)

But plot.formula promises to pass "..." arguments to later "hand offs" and apparently it munges up the 'dots' in a manner that plot.data.frame does not. In fact, plot.formula gets handed back to generic `plot`. Prof Ripley obviously has an understanding of the term `expression` that surpasses mine. Does your understaning of his reply extend to explaining why plot.data.frame works with our naive invocation of panel.first while his suggested syntax does not:

plot(dat, panel.first=quote( bgfun() ) ) # Fails.
plot(dat, panel.first= bgfun()  )   # Succeeds.

So I it still appears there is a demonstrable degree of inconsistency, even if there is no "bug".


The solution gives me some insight into how the lazy evaluation works.

## Note: It's still not a documented use of the function!
 plot(y ~ x, data=dat, panel.first=quote(bgfun()))


On Wed, May 25, 2011 at 2:13 AM, <r-b...@r-project.org> wrote:
https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=14591

Brian Ripley <rip...@stats.ox.ac.uk> changed:

          What    |Removed                     |Added
----------------------------------------------------------------------------
            Status|NEW                         |CLOSED
        Resolution|                            |INVALID

--- Comment #1 from Brian Ripley <rip...@stats.ox.ac.uk> 2011-05-25 03:13:34 EDT ---
panel.first is not a documented argument to plot.formula: please do
read the help.

Yes, I did read the help page. I also looked at the code (of plot.formula, plot.data.frame, and plot.default) and made a good faith effort at following the flow of data through that code by inserting print and str statements at what appeared to be critical points so I could see where plot.formula was "going" and what it was being given to work with.

 It is a documented argument to plot.default(), as

panel.first: an expression to be evaluated after the plot axes are set
               ^^^^^^^^^^
but you passed an evaluated function call. It first ran bgfun() and then the
plot call.  It worked for plot.default() by lazy evaluation.

I also tried using just panel.first=bgfun as I would have with lattice calls, and it did not succeed in any application.


You needed

plot(y ~ x, data=dat, panel.first=quote(bgfun()))



--
David Winsemius, MD
West Hartford, CT

______________________________________________
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