for loop on R function -


i'm new r (and programming generally), , confused why following bits of code yield different results:

x <- 100  for(i in 1:5){   x <- x + 1   print(x) } 

this incrementally prints sequence 101:105 expect.

x <- 100  f <- function(){   x <- x + 1   print(x) }  for(i in 1:5){   f() } 

but prints 101 5 times.

why packaging logic function cause revert original value on each iteration rather incrementing? , can make work repeatedly-called function?

the problem

it because in function dealing local variable x on left side, , global variable x on right side. not updating global x in function, assigning value of 101 local x. each time call function, same thing happens, assign local x 101 5 times, , print out 5 times.

to visualize:

# "global" scope x <- 100  f <- function(){   # "global" x has value 100,   # add 1 it, , store in new variable x.   x <- x + 1   # new x has value of 101   print(x) } 

this similar following code:

y <- 100  f <- function(){   x <- y + 1   print(x) } 

one possible fix

as fix it. take variable argument, , pass update. this:

f <- function(old.x) {     new.x <- old.x + 1     print(new.x)     return(new.x) } 

you want store return value, updated code like:

x <- 100  f <- function(old.x) {     new.x <- old.x + 1     print(new.x)     return(new.x) }  (i in 1:5) {   x <- f(x) } 

Comments

Popular posts from this blog

SPSS keyboard combination alters encoding -

Add new record to the table by click on the button in Microsoft Access -

javascript - jQuery .height() return 0 when visible but non-0 when hidden -