[R] Names of Greek letters stored as character strings; plotmath.

Duncan Murdoch murdoch.duncan at gmail.com
Mon May 21 05:25:04 CEST 2012


On 12-05-20 10:28 PM, Bert Gunter wrote:
> Well, that's not very comforting, Duncan. It's like saying that you
> have to read the engineering specs to drive the car successfully.

I think Robert's message that I responded to was asking for a deeper 
understanding than simply driving the car.  He appeared to want to know 
why the car worked the way it did, and describing that entirely in terms 
of things you can see without opening the hood is hard.

> I am certainly ignorant of the internals, but I honestly believe
> well-written documentation on these points would help. I learned a lot
> when I read V&R's "S Programming" some years ago, so I think that's an
> existence theorem.

I wouldn't disagree with that.  Both V and R knew an awful lot about S 
when they wrote that, and they know how to communicate well.

> Unfortunately, writing such documentation is hard, maybe harder than
> writing the code even (my own experience documenting my own code). And
> your logical response -- "Bert, R is open source and would welcome
> your efforts" -- is not going to get much traction. Like you, I don't
> have the time (nor, in my case, the smarts).
>
> Nevertheless, I agree with Robert's sentiment that it could be done.
> In particular, plotmath docs really should expand their explanation of
> appropriate syntax, imho.

I don't think it's impossible to write the book Robert wants, and since 
there are a lot of R books out there, someone may have already done it. 
If they have, maybe they did it by explaining R internals.  If not, I 
think my advice stands.

Duncan Murdoch

> As always, I end by acknowledging the extraordinary efforts of R's
> developers. Your success is what has led to such carping. A response
> of "Aw shaddup" would therefore not be out of line.
>
> Best,
> Bert
>
> On Sun, May 20, 2012 at 5:00 PM, Duncan Murdoch
> <murdoch.duncan at gmail.com>  wrote:
>> On 12-05-20 6:53 PM, Robert Baer wrote:
>>>
>>> -----Original Message-----
>>> From: William Dunlap
>>> Sent: Saturday, May 19, 2012 11:07 AM
>>> To: Rolf Turner
>>> Cc: r-help
>>> Subject: Re: [R] Names of Greek letters stored as character
>>> strings;plotmath.
>>>
>>> parse(text=paste(...)) works in simple cases but not in others.  The
>>> fortune about it is there because it is tempting to use but if you bury it
>>> in a general purpose function it will cause problems when people
>>> start using nonstandard names for variables.  bquote(), substitute(),
>>> call(), and relatives work in all cases.  E.g.,
>>>
>>>    >    par(mfrow=c(2,1))
>>>    >    power<- "gamma" ; x<- "Waist" ; y<- "Weight" # valid R variable names
>>>    >    plot(0, main=bquote(.(as.name(x))^.(as.name(power))/.(as.name(y))))
>>>    >    plot(0, main=parse(text=paste0(x, "^", power, "/", y))) # same as
>>> previous
>>>    >
>>>    >    power<- "gamma" ; x<- "Waist Size (cm)" ; y<- "Weight (kg)" # invalid
>>> R names
>>>    >    plot(0, main=bquote(.(as.name(x))^.(as.name(power))/.(as.name(y))))
>>>    >    plot(0, main=parse(text=paste0(x, "^", power, "/", y))) # whoops
>>>    Error in parse(text = paste0(x, "^", power, "/", y)) :
>>>      <text>:1:7: unexpected symbol
>>>    1: Waist Size
>>>             ^
>>>
>>> Now you might say that serves me right for using weird variable names,
>>> but some of us use R as a back end to a GUI system (one not designed
>>> around R) and don't want to inflict on users R's rules for names when
>>> we do not have to.
>>>
>>> Bill Dunlap
>>> Spotfire, TIBCO Software
>>> wdunlap tibco.com
>>>
>>>
>>>> -----Original Message-----
>>>> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
>>>> On Behalf
>>>> Of Bert Gunter
>>>> Sent: Saturday, May 19, 2012 7:24 AM
>>>> To: Gabor Grothendieck
>>>> Cc: r-help
>>>> Subject: Re: [R] Names of Greek letters stored as character strings;
>>>> plotmath.
>>>>
>>>> ... and here is another incantation that may be  informative.
>>>>
>>>> xnm<- as.name("gamma')  ## This does the parsing
>>>> plot(0, xlab =bquote(.(xnm))
>>>>
>>>> The initial puzzle is that if you just set
>>>> xnm<- "gamma"
>>>>
>>>> bquote will insert the string "gamma" rather than the symbol. After
>>>> all, that's what plotmath sees for xnm. So the key is telling plotmath
>>>> that it's a symbol, not a string. This can either be done before, as
>>>> above, or inline, as you and Gabor showed. Unsurprisingly. this also
>>>> does it, since as.name() is doing the parsing:
>>>>
>>>> xnm<- "gamma"
>>>>   plot(0,xlab=bquote(.(as.name(xnm))))
>>>>
>>>> AND we are adhering to Thomas's dictum: bquote is a wrapper for
>>>> substitute(), which is what he recommends as the preferable
>>>> alternative to eval(parse(...)) . But, heck -- all such software
>>>> principles are just guidelines. Whatever works (robustly).
>>>>
>>>> HTH.
>>>>
>>>> Cheers,
>>>> Bert
>>>>
>>>> On Sat, May 19, 2012 at 3:17 AM, Gabor Grothendieck
>>>> <ggrothendieck at gmail.com>    wrote:
>>>>>
>>>>> On Sat, May 19, 2012 at 1:18 AM, Rolf Turner<rolf.turner at xtra.co.nz>
>>>>> wrote:
>>>>>>
>>>>>>
>>>>>> I had such good luck with my previous question to r-help, (a few
>>>>>> minutes
>>>>>> ago) that I thought I would try again with the following query:
>>>>>>
>>>>>>> Suppose I have
>>>>>>>
>>>>>>>     xNm<- "gamma"
>>>>>>>
>>>>>>> I would like to be able to do
>>>>>>>
>>>>>>>     plot(1:10,xlab =<something involving xNm">)
>>>>>>>
>>>>>>> and get the x axis label to be the Greek letter gamma
>>>>>>> (rather than the literal text string "gamma").
>>>>>>>
>>>>>>> Is this possible?  I've messed around with substitute()
>>>>>>> and bquote() and got nowhere.
>>>>>>
>>>>>>
>>>>>>
>>>>>> Then, just before clicking on "Send", I had one more thimk, and blow
>>>>>> me down, I got something that worked:
>>>>>>
>>>>>> plot(1:10,xlab=eval(expression(parse(text=xNm))))
>>>>>>
>>>>>
>>>>> That can be shortened to:
>>>>>
>>>>> plot(0, xlab = parse(text = xNm))
>>>
>>>
>>>
>>> -- snip --
>>>
>>>
>>> This discussion has been exceedingly helpful, sort of.
>>>
>>> Every time I try to do a task involving this I read the documentation for
>>> bquote(), expression(), plotmath(), etc.,  over and over, and I still fail
>>> to get the big picture of how R parses things under the hood.  Typically,
>>> I
>>> only succeed each time by frustrating trial and error.   Can I ask how you
>>> guys got a handle on the bigger (besides your usual brilliance<G>)?
>>>
>>> Is there more comprehensive documentation in the developer literature or
>>> is
>>> there a user wiki that you would recommend for those who never quite get
>>> the
>>> big picture?  If not, this would be a worthy topic for an R Journal
>>> article
>>> if someone has knowledge and the time to do it.  Wish I were knowledgeable
>>> enough to do it myself.
>>
>>
>> I think you have to try writing C code to work with R objects to really
>> understand what's going on.  Reading those sections of the Writing R
>> Extensions manual will probably help, but actually writing C code to do it
>> may be necessary.
>>
>> It's not really a very complicated system, it's just that things that are
>> obviously different in C (e.g. the R symbol name "gamma" versus the string
>> "gamma") look confusingly similar in R.
>>
>> You might be able to figure this out by studying the result of str(x) (or
>> the low level .Internal(inspect(x))) for lots of different x objects, but I
>> don't think it's going to make sense unless you know what's going on behind
>> the curtain.
>>
>> Duncan Murdoch
>>
>> ______________________________________________
>> 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.
>
>
>



More information about the R-help mailing list