[R] Determining name of calling function.
Peter Dalgaard
P.Dalgaard at biostat.ku.dk
Mon Sep 28 16:49:35 CEST 2009
baptiste auguie wrote:
> Not answering your question, but just pointing out the example of
>
> base::.NotYetImplemented()
>
> essentially doing the same thing.
>
> Best,
>
> baptiste
>
>
> 2009/9/28 Rolf Turner <r.turner at auckland.ac.nz>:
>> I have vague recollections of seeing this question discussed on r-help
>> previously, but I can't find the relevant postings.
>>
>> I want to determine (from within a given function) the name of the function
>> calling that given function.
>>
>> E.g. if I have a function foo() which calls a function bar(), and also
>> a function clyde() which calls bar(), I want to have, in the code of bar(),
>> an instruction which will return the character string "foo" if bar() was
>> called from foo() and the string "clyde" if bar() was called from clyde().
>>
>> Without really understanding what I'm doing I cobbled together the
>> following:
>>
>> fname <- as.character(sys.call(-1))[1]
>>
>> This ***seems*** to work, at least in simple test cases.
>>
>> But is it reliably robust? Are there traps for young players that I am
>> not seeing?
>>
>> My ``solution'' returns NA as the value of fname if bar() is called from the
>> command line, rather than being called by foo() or clyde(). This is
>> acceptable.
>> I think ....
>>
>> Any avuncular advice from those younger and wiser than myself? :-)
>>
>> cheers,
>>
>> Rolf Turner
>>
(How old are you? Surely you are aware that avuncular advice usually
comes from your parents' siblings and their spouses.)
I'd maybe be more inclined to use something like
deparse(sys.call(-1)[[1]]) but there's no clear benefit.
The main trap would be that the first element of the call is not
necessarily a name. Consider
> (function(x)deparse(sys.call()[[1]]))(x=2)
[1] "(function(x) deparse(sys.call()[[1]]))"
> (function(x)as.character(sys.call()[1]))(x=2)
[1] "(function(x) as.character(sys.call()[1]))"
and notice that in fact the function bing called may not even _have_ a name.
--
O__ ---- Peter Dalgaard Øster Farimagsgade 5, Entr.B
c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K
(*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
More information about the R-help
mailing list