On 12-04-29 3:30 AM, Philippe Grosjean wrote: > Hello, > > ?delayedAssign presents substitute() as a way to look at the expression > in the promise. However, > > msg<- "old" > delayedAssign("x", msg) > msg<- "new!" > x #- new! > substitute(x) #- x (was 'msg' ?) > > Here, we just got 'x'... shouldn't we got 'msg'? > > Same result when the promise is not evaluated yet: > > delayedAssign("x", msg) > substitute(x) > > In a function, that works: > > foo<- function (x = msg) substitute(x) > foo() > > Did I misunderstood something? It seems to me that substitute() does not > behaves as documented for promises created using delayedAssign().
I don't think this is well documented, but substitute() doesn't act the same when its "env" argument is the global environment. So this works the way you'd expect:
e <- new.env() msg <- "old" delayedAssign("x", msg, assign=e) msg <- "new" e$x substitute(x, e) I forget what the motivation was for special-casing globalenv(). Duncan Murdoch ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel