[R] Putting an index explicitly into function code --- a curiosity.

Gabor Grothendieck ggrothendieck at gmail.com
Sat Jan 7 05:22:21 CET 2012


On Fri, Jan 6, 2012 at 11:13 PM, R. Michael Weylandt
<michael.weylandt at gmail.com> wrote:
> Presumably because the i <= 4 has to be re-evaluated at the start of
> each iteration of the while-loop which implicitly force()s it?
>
> Though, I don't know if it might not be a bad idea to put an implicit
> force() in the internal code for `for` to prevent these sorts of
> things. I can't immediately think of a scenario where this sort of
> behavior would be useful. It might also simplify the internals to pass
> a value rather than what I presume is actually a promise (but I
> haven't looked yet and I'm still not in a position to verify)

It does not appear to be a promise.  Using a C routine that returns
TRUE for a promise and FALSE otherwise:

> # test ispromise
>
> # is a promise
> delayedAssign("a", x+1)
> .Call("ispromise", "a", .GlobalEnv)
[1] TRUE
>
> # not a promise
> xx <- 3
> .Call("ispromise", "xx", .GlobalEnv)
[1] FALSE
>
> # seems index of for is not a promise
> #
> for(i in 1:3) print(.Call("ispromise", "i", .GlobalEnv))
[1] FALSE
[1] FALSE
[1] FALSE


-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com



More information about the R-help mailing list