[R] detecting entry into a recursive function

Bert Gunter gunter.berton at gene.com
Sun Feb 17 16:11:21 CET 2013


Make the flag an attribute of the function? Unless the user looks at
the attributes, it will be "invisible."

(Not sure this does what you want, but maybe it's useful.)

-- Bert


On Sun, Feb 17, 2013 at 7:03 AM, Benjamin Tyner <btyner at gmail.com> wrote:
> 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
>>
>
>
> ______________________________________________
> 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.
>



-- 

Bert Gunter
Genentech Nonclinical Biostatistics

Internal Contact Info:
Phone: 467-7374
Website:
http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm



More information about the R-help mailing list