[Rd] Enlightenment sought and a possible buglet in vector.Rd

Berwin A Turlach berwin at maths.uwa.edu.au
Mon Dec 5 05:23:47 CET 2005


G'day Brian,

>>>>> "BDR" == Prof Brian Ripley <ripley at stats.ox.ac.uk> writes:

    >> I found in the R language definition manual the passage that
    >> discourages users of assigning objects within function calls
    >> since it is not guaranteed that the assignment is ever made
    >> because of R's lazy evaluation model.  But this does not seem
    >> to explain the above behaviour since the argument to print is
    >> evaluated.  If I replace sys.on.exit() with, say, ls() in both
    >> functions, then they produce the same output (and the output
    >> that I expect).  Why does f2() not work with sys.on.exit()?

    BDR> It does work, but you seems to have misunderstood what it
    BDR> does.  See e.g.  the `bug' report discussed at
    BDR> http://tolstoy.newcastle.edu.au/~rking/R/devel/05/02/2112.html
Mmh, mea culpa, I am a bit red-faced here, in my quest to find out
what was going on, I checked about everything (including a private
e-mail to an R-core member) but the bug repository and the help page
of sys.on.exit().  I guess that if I have read the latter, I would
have figured out what was going on.  Instead I was satisfied with what
the on.exit() help page stated in its "see also" section:

     \seealso{
         \code{\link{sys.on.exit}} to see the current expression.
     }

May I request that this help page is changed according to the patch
attached below to clarify on the on.exit() help page what it is that
sys.on.exit() is returning?

    BDR> You might find

    BDR> g <- function(test) {}
    BDR> f2 <- function(){
    BDR> par.def <- par(no.readonly=TRUE)
    BDR> on.exit(par(par.def))
    BDR> g(tt <- sys.on.exit())
    BDR> str(tt)
    BDR> invisible()
    BDR> }
    BDR> f2()

    BDR> illuminating.
Mmh, in this code the function g is not evaluating its argument.  So I
would expect an error message in f2() that tt is not defined no matter
which function (sys.on.exit, ls, ...) I am using in the call to g()
within f().  Exactly the situation about which the R language
definition is warning, so this seems to be a different trap than the
one I stepped into....

Cheers,

        Berwin

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: R-patch
Url: https://stat.ethz.ch/pipermail/r-devel/attachments/20051205/78465d21/R-patch.ksh


More information about the R-devel mailing list