On Wed, May 20, 2009 at 7:48 AM, Wacek Kusnierczyk
<[email protected]> 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.
______________________________________________
[email protected] 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.