[R] *** POSSIBLE SPAM *** Functions returning functions

Romain Francois romain.francois at dbmail.com
Wed May 20 13:31:45 CEST 2009


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. Then I call
> x<- something
> B<-A(x)
>
> When R executes this last statement,  does it perform all the
> calculations inside function A again 
no, see this:

 > f <- function( x = 3){
+    function( ){}
+ }
 > g <- f()
 > ls.str( environment(g) )
x :  num 3
 > h <- f(6)
 > ls.str( environment(h) )
x :  num 6
 > ls.str( environment(g) )
x :  num 3

See also colorRampPalette which uses this feature:

 > colorRampPalette
function (colors, ...)
{
    ramp <- colorRamp(colors, ...)
    function(n) {
        x <- ramp(seq.int(0, 1, length.out = n))
        rgb(x[, 1], x[, 2], x[, 3], maxColorValue = 255)
    }
}
<environment: namespace:grDevices>
 > pal <- colorRampPalette( c("blue", "white", "red") )
 > pal
function (n)
{
    x <- ramp(seq.int(0, 1, length.out = n))
    rgb(x[, 1], x[, 2], x[, 3], maxColorValue = 255)
}
<environment: 0x99aba4c>
 > ls.str( environment( pal ) )
colors :  chr [1:3] "blue" "white" "red"
ramp : function (x) 

> (i.e., all the calculations that
> yield 'y')
>  or the value of 'y' is already stored in the function's local environment ?
>
> Many thanks.
> Paulo Gustavo Grahl, CFA
>   

-- 
Romain Francois
Independent R Consultant
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr




More information about the R-help mailing list