R-alpha: lazy evaluation and plot.step()
Kurt Hornik
Kurt.Hornik@ci.tuwien.ac.at
Tue, 22 Apr 1997 18:33:36 +0200
>>>>> Peter Dalgaard BSA writes:
> The explanation seems to be in different behaviour of the
> substitute(...) construction:
> R:
>> f<-function(a,b){a<-1; print(deparse(substitute(c(a,b))))}
>> f(a,b)
> [1] "c(1, b)"
> Splus:
>> f<-function(a,b){a<-1; print(deparse(substitute(c(a,b))))}
>> f(a,b)
> [1] "c(a, b)"
> [1] "c(a, b)"
> So in R, assignment to a formal parameter causes the changed value to
> be used for substitution purposes.
> In S, this does not happen *unless the formal parameter is a
> constant.*!
>> f(2,b)
> [1] "c(1, b)"
> [1] "c(1, b)"
>> f(2:2,b)
> [1] "c(2:2, b)"
> [1] "c(2:2, b)"
>> f("a",b)
> [1] "c(1, b)"
> [1] "c(1, b)"
> This is confusing in both languages, but I'd say that S has the bigger
> problem...
Not a surprise ...
Thanks, Peter, for the explanation. Does this also explain the
different results for x <- sort(x)?
> In Kurts example, inserting
> xlab
> ylab
> as the first two lines of the function defeats lazy evaluation and
> provides the desired behaviour (I suppose) in both R and S.
Yes. This is also what I suggested to Martin in order to have a version
of plot.step() which does the same under R and S.
-k
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-