[R] problem deparsing argument

Bert Gunter gunter.berton at gene.com
Fri Aug 19 04:16:21 CEST 2011


The problem is scope -- the environment in which substitute() looks for x.

Try:



foo <- function(x){ deparse(substitute(x,env=parent.frame()))}
a<-1
foo(a)

bar <- function(x)foo(x)
bar(a)

-- Bert

2011/8/18 David Winsemius <dwinsemius at comcast.net>:
>
> On Aug 18, 2011, at 5:11 PM, Ernest Adrogué wrote:
>
>> Hi,
>>
>> I don't know much about R's deparsing "magic", I simply use the
>> deparse(substitute(arg)) trick to get the names of the variables
>> passed as arguments to the function in order to set labels, etc.
>>
>> The problem is that this doesn't work with nested functions. For
>> example,
>>
>>> foo <- function(x) print(deparse(substitute(x)))
>>> a=1
>>> foo(a)
>>
>> [1] "a"
>>
>> This is OK. However,
>>
>>> bar <- function(x) foo(x)
>>> bar(a)
>>
>> [1] "x"
>>
>> this is not what I want. I wanted bar(a) to print "a" not "x". Is it
>> possible to do this?
>
>> bar <- function(x) class(substitute(foo(x)))
>> bar(a)
> [1] "call
>
> So...
>
>> bar <- function(x) substitute(foo(x))[[2]]
>> bar(a)
> a
>
> --
>
> David Winsemius, MD
> West Hartford, CT
>
> ______________________________________________
> 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.
>



-- 
"Men by nature long to get on to the ultimate truths, and will often
be impatient with elementary studies or fight shy of them. If it were
possible to reach the ultimate truths without the elementary studies
usually prefixed to them, these would not be preparatory studies but
superfluous diversions."

-- Maimonides (1135-1204)

Bert Gunter
Genentech Nonclinical Biostatistics



More information about the R-help mailing list