On Wed, May 20, 2009 at 7:48 AM, Wacek Kusnierczyk <waclaw.marcin.kusnierc...@idi.ntnu.no> wrote: > Paulo Grahl wrote: >> Dear All: >> >> I have a question regarding the behavior of functions. >> Say I define a function that returns another function : >> A <- function(parameters) { >> # calculations w/ parameters returning 'y' >> tmpf <- function(x) { # function of 'y' } >> return(tmpf) >> } >> >> The value of the parameters are stored in an environment local to the >> function. > > consider this example: > > foo = function(a, b) > function(c) > if (c) a else b > > x = 1 > y = 2 > bar = foo(x, y) > > bar(TRUE) > # 1 > x = 0 > bar(TRUE) > # 1, not 0 > > y = 0 > bar(FALSE) > # 0, not 2 >
The last one is due to lazy evaluation. Try repeating it with this variation: foo2 = function(a, b) { force(a); force(b) function(c) if (c) a else b } which forces a and b to be evaluated right away. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.