[R] detecting entry into a recursive function

Benjamin Tyner btyner at gmail.com
Sun Feb 17 16:03:25 CET 2013


Thanks Jim -- I had considered this approach; is there any way to "hide" 
such arguments from users?

Jim Lemon wrote:
> 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