[R] detecting entry into a recursive function

Jim Lemon jim at bitwrit.com.au
Sun Feb 17 06:01:33 CET 2013


On 02/17/2013 12:55 PM, Benjamin Tyner wrote:
> Given a function that calls itself, what's the best way to detect the
> entry point? The best I came up with is:
>
> IsEntryPoint <- function(){
>
> par <- sys.call(-1L)[[1]]
> grandpar <- sys.call(-2L)[[1]]
>
> !identical(par, grandpar)
> }
>
> but this won't work for functions that don't directly call themselves;
> for example, in this one the paste gets inserted in the call stack, so i
> is always TRUE.
>
> f <- function(d){
>
> i <- IsEntryPoint()
>
> if(d > 1L) paste(d, f(d-1L))
> }
>
> Any ideas?
>
Hi Ben,
There are a number of ways to do this, from simply having a flag that 
has one value at the initial call to the function and another value when 
the function calls itself. for an example of this, see the code for the 
"sizetree" function in the plotrix package, in particular the 
"firstcall" argument.

Jim



More information about the R-help mailing list