r - Function flow: why does this function return 20 -


suppose have function called l:

l <- function(x) x + 1 

then define function, m, within m, redefine l:

m <- function() {        l <- function(x) x*2        l(10) } m() 

why m return x*2, , not x+1?

if you're not sure what's going on, can helpful add print statements. let's add few print statements code -- 1 before m called, 2 inside m function, , 1 after m called:

l <- function(x) x + 1 m <- function() {   print(l)   l <- function(x) x * 2   print(l)   l(10) } print(l) # function(x) x + 1 m() # function(x) x + 1 # function(x) x * 2 # <environment: 0x7f8da5ac3b58> # [1] 20 print(l) # function(x) x + 1 

before m called , @ top of m, l defined function returns x+1. however, within m change l new function, 1 returns x*2, indicated second print statement in function. result, calling l(10) returns 20. once leave function original l definition (x+1) because x*2 version defined function. concept of function being defined locally called name masking.


Comments

Popular posts from this blog

Magento/PHP - Get phones on all members in a customer group -

php - .htaccess mod_rewrite for dynamic url which has domain names -

Website Login Issue developed in magento -