2008/3/7 Ben Bolker <[EMAIL PROTECTED]>: > > Despite the spirited arguments of various R-core folks > who feel that mle() doesn't need a "data" argument, and > that users would be better off learning to deal with function > closures, I am *still* trying to make such things work > in a reasonably smooth fashion ... > > Is there a standard idiom for "merging" environments? > i.e., suppose a function has an environment that I want > to preserve, but _add_ the contents of a data list -- > would something like this do it? Is there a less ugly > way? > > x <- 0 > y <- 1 > z <- 2 > > f <- function() { > x+y+z > } > > f2 <- function(fun,data) { > L <- ls(pos=environment(fun)) > mapply(assign,names(data),data, > MoreArgs=list(envir=environment(fun))) > print(ls(pos=environment(fun))) > } > > f2(f,list(a=1))
I think you're doomed to be ugly if you don't use closures - I think any explicit manipulation of environments is worse than the implicit manipulation by closures. f <- function(data) with(data, x + y + z) f2 <- function(fun, data) function() fun(data) f2(f, list(x = 10))() Although it would be even nicer if you could do: f <- function() x + y + z f2 <- function(fun, data) function() with(data, fun()) but I think that's confusing different types of scoping. Hadley -- http://had.co.nz/ ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel