Gabor Grothendieck <[EMAIL PROTECTED]> wrote: fn <- function(x,y) { assign(as.character(substitute(x)), "zz", sys.frame(-1)) assign(as.character(substitute(y)), 3, sys.frame(-1)) } fn(a,b) # sets a to "zz" and b to 3 "list2<-" <- function(x,y,value) { assign(as.character(substitute(y)), value[[2]], sys.frame(-1)) value[[1]] } fn <- function()list("zz",3) a <- 1 # first arg must exist prior to invoking list2. Its value not important. list2(a,b) <- fn() There is still another way, which doesn't use substitute, as.character, or assign. Instead of returning two results, accept an extra argument which is a function that decides what to do with them.
> f <- function(handler) { handler("zz", 3) } > f(function(x, y) { a <<- x; b <<- y }) > a [1] "zz" > b [1] 3 > g <- function() { + u <- v <- NULL # make it clear these are local to g + f(function(x,y) {u <<- x; v <<- y}) + list(u, v) # see what we got + } > g() [[1]] [1] "zz" [[2]] [1] 3 Whenever I would have wanted to pass "a variable" to an R function, this is what I do instead. It works so well that I am still happily ignorant of how to use substitute(). It's also much more compiler-friendly. ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html