[R] Functions returning functions

Gabor Grothendieck ggrothendieck at gmail.com
Wed May 20 14:00:09 CEST 2009


On Wed, May 20, 2009 at 7:48 AM, Wacek Kusnierczyk
<Waclaw.Marcin.Kusnierczyk at 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.




More information about the R-help mailing list