From ggrothendieck at gmail.com  Thu Sep 27 03:49:58 2007
From: ggrothendieck at gmail.com (Gabor Grothendieck)
Date: Wed, 26 Sep 2007 21:49:58 -0400
Subject: [Rd] delayedAssign
In-Reply-To: <971536df0709191230p3a62d94g1dcf8f978dad6305@mail.gmail.com>
References: <971536df0709191230p3a62d94g1dcf8f978dad6305@mail.gmail.com>
Message-ID: <971536df0709261849s519cb30uf72871bf0f7a8b0d@mail.gmail.com>

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)"
>



[Rd] delayedAssign
Gabor Grothendieck