Skip to content
Prev 45882 / 63421 Next

Substitute / delayedAssign (was: Substitute unaware when promise objects are evaluated)

On 16/05/2013 9:06 AM, McGehee, Robert wrote:
You should never call .Internal.  Arguments to internal functions may 
change without notice.

Here's one way to write your example without it.

x <- list(a=3, b=expression(a+2), sleep=expression(Sys.sleep(2)))
env <- new.env()

mydelay <- function(i) {
   expr <- x[[i]]
   name <- names(x)[i]
   do.call(delayedAssign, list(x=name, value=substitute(eval(expr), 
list(expr=expr)),
           eval.env=env, assign.env=env))
}

for (i in seq(x)) mydelay(i)

Duncan Murdoch