joseph.g.boyer at gsk.com wrote on 12/18/2008 04:22 PM:> I'm trying to understand the use of recursive functions described on
page
> 45 of An Introduction to R by the R core development team.
>
> A function is a list of expressions, which all get executed with only the
> last being assigned to a global variable, right?
> So if a function refers recursively to itself, it should simply start with
> the first
> expression and go from there. At least that is my understanding of why the
> example given on page 45 works.
>
> In light of the above, I would appreciate it if someone would understand
> why the following example does not work:
>
> q <- function(x,h) {if (x < 2) {x <<- x+1; return(q(x))} else
return(x)}
>
> If x < 1, this should add 1 to x and go back to the beginning of the if
> expression, and the final result should be 2. So q(0) should return 2. But
>
> it returns an error message.
All references to x save one (the assignment with the <<- operator) are
found within the current frame, not by lexical scoping, and hence is
never changed... producing infinite recursion. The following at least
fixes your example:
All references to x save one (the assignment with the <<- operator) are
found within the current frame, not by lexical scoping, and hence is
never changed... producing infinite recursion. The following at least
fixes your example:
q <- function(x,h) {if (x < 2) {x <<- x+1; x <- x+1;
return(q(x))} else
return(x)}
ls() # no x in global env just yet
q(-10)
ls()
Jeff>
>
> Joe Boyer
> Statistical Sciences
> Renaissance Bldg 510, 3233-D
> Mail Stop RN0320
> 8-275-3661
> cell: (610) 209-8531
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org 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.
--
http://biostat.mc.vanderbilt.edu/JeffreyHorner