[Rd] Substitute unaware when promise objects are evaluated
McGehee, Robert
Robert.McGehee at geodecapital.com
Wed May 15 17:54:26 CEST 2013
R-devel,
I used the 'substitute' function to create labels for objects inside an environment, without actually evaluating the objects, as the objects might be promises.
However, I was surprised to see that 'substitute' returns the expression slot of the original promise even after the promise has been forcibly evaluated. (Doesn't the promise go away after evaluation?) This behavior probably falls under the "...no guarantee that the resulting expression makes any sense" clause of the ?substitute documentation, but in case there's something actually wrong here, I thought I'd send an example.
Here's an example showing how the evaluated expression returned by substitute does not match the actual variable value:
> env <- new.env()
> z <- 0
> delayedAssign("var", z+2, assign.env=env)
> substitute(var, env=env)
z + 2
> force(env$var)
[1] 2
> z <- 10
> substitute(var, env=env)
z + 2
> eval(substitute(var, env=env))
[1] 12
> force(env$var)
[1] 2
Is there any obvious way to code around this behavior, e.g. can I explicitly check if an object in an environment is an unevaluated promise?
Thanks,
Robert
> R.version
_
platform x86_64-pc-linux-gnu
arch x86_64
os linux-gnu
system x86_64, linux-gnu
status
major 3
minor 0.0
year 2013
month 04
day 03
svn rev 62481
language R
version.string R version 3.0.0 (2013-04-03)
nickname Masked Marvel
Robert McGehee, CFA
Geode Capital Management, LLC
One Post Office Square, 28th Floor | Boston, MA | 02109
Direct: (617)392-8396
More information about the R-devel
mailing list