Message-ID: <CACk-te1fqL1Di4Lb6iP5E2q8jXbwop_YR-0-w_24VN--6PxT6A@mail.gmail.com>
Date: 2013-02-17T15:11:21Z
From: Bert Gunter
Subject: detecting entry into a recursive function
In-Reply-To: <5120F13D.4050002@gmail.com>
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