[Rd] delayedAssign
Gabor Grothendieck
ggrothendieck at gmail.com
Thu Sep 27 03:49:58 CEST 2007
I thought that perhaps the behavior in the previous post,
while inconsistent with the documentation, was not all that
harmful but I think its related to the following which is a potentially
serious bug. z is a list with a single numeric component,
as the dput output verifies, yet we cannot compare its first element
to 7 without getting an error message.
Later on we see that its because it thinks that z[[1]] is of type "promise"
and even force(z[[1]]) is of type "promise".
> f <- function(x) environment()
> z <- as.list(f(7))
> dput(z)
structure(list(x = 7), .Names = "x")
> z[[1]] == 7
Error in z[[1]] == 7 :
comparison (1) is possible only for atomic and list types
> force(z[[1]]) == 7
Error in force(z[[1]]) == 7 :
comparison (1) is possible only for atomic and list types
>
> typeof(z)
[1] "list"
> typeof(z[[1]])
[1] "promise"
> typeof(force(z[[1]]))
[1] "promise"
> R.version.string # Vista
[1] "R version 2.6.0 beta (2007-09-23 r42958)"
On 9/19/07, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:
> The last two lines of example(delayedAssign) give this:
>
> > e <- (function(x, y = 1, z) environment())(1+2, "y", {cat(" HO! "); pi+2})
> > (le <- as.list(e)) # evaluates the promises
> $x
> <promise: 0x032b31f8>
> $y
> <promise: 0x032b3230>
> $z
> <promise: 0x032b3268>
>
> which contrary to the comment appears unevaluated. Is the comment
> wrong or is it supposed to return an evaluated result but doesn't?
>
> > R.version.string # Vista
> [1] "R version 2.6.0 alpha (2007-09-06 r42791)"
>
More information about the R-devel
mailing list