[R] how do I define a function which is equivalent to `deparse(substitute(x))`?

David Winsemius dwinsemius at comcast.net
Mon Dec 12 05:53:42 CET 2016


> On Dec 11, 2016, at 5:35 PM, frederik at ofb.net wrote:
> 
> Dear R-Help,
> 
> I was going to ask Jeff to read the entire works of William
> Shakespeare to learn why his reply was not helpful to me...

From a typical US 10th grade English assignment:

Cassius:
"The fault, dear Brutus, is not in our stars,
But in ourselves, that we are underlings."

-- 
David.
> 
> Then I realized that the answer, as always, lies within...
> 
>    desub <- function(y) {
>      e1=substitute(y, environment())
>      e2=do.call(substitute,list(e1), env=parent.frame())
>      deparse(e2)
>    }
> 
> Sorry to trouble the list; other solutions still welcome.
> 
> Cheers,
> 
> Frederick
> 
> On Sun, Dec 11, 2016 at 12:46:23AM -0800, Jeff Newmiller wrote:
>> No. Read Hadley Wickham's "Advanced R" to learn why not. 
>> -- 
>> Sent from my phone. Please excuse my brevity.
>> 
>> On December 10, 2016 10:24:49 PM PST, frederik at ofb.net wrote:
>>> Dear R-Help,
>>> 
>>> I asked this question on StackOverflow,
>>> 
>>> http://stackoverflow.com/questions/41083293/in-r-how-do-i-define-a-function-which-is-equivalent-to-deparsesubstitutex
>>> 
>>> but thought perhaps R-help would be more appropriate.
>>> 
>>> I want to write a function in R which grabs the name of a variable
>>> from the context of its caller's caller. I think the problem I have is
>>> best understood by asking how to compose `deparse` and `substitute`.
>>> You can see that a naive composition does not work:
>>> 
>>>   # a compose operator
>>>> `%c%` = function(x,y)function(...)x(y(...))
>>> 
>>>   # a naive attempt to combine deparse and substitute
>>>> desub = deparse %c% substitute
>>>> f=function(foo) { message(desub(foo)) }
>>>> f(log)
>>>   foo
>>> 
>>>   # this is how it is supposed to work
>>>> g=function(foo) { message(deparse(substitute(foo))) }
>>>> g(log)
>>>   log
>>> 
>>> Is there a way I can define a function `desub` so that `desub(x)` has
>>> the same value as `deparse(substitute(x))` in every context?
>>> 
>>> Thank you,
>>> 
>>> Frederick Eaton
>>> 
>>> ______________________________________________
>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>> 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.
>> 
> 
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.

David Winsemius
Alameda, CA, USA



More information about the R-help mailing list