[R] Names of Greek letters stored as character strings; plotmath.
Gabor Grothendieck
ggrothendieck at gmail.com
Sat May 19 21:15:14 CEST 2012
On Sat, May 19, 2012 at 2:16 PM, Paul Johnson <pauljohn32 at gmail.com> wrote:
> On Sat, May 19, 2012 at 11:07 AM, William Dunlap <wdunlap at tibco.com> wrote:
>> 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
>>
> Bill's point is on the money here. We should aim to teach one way that
> works always. But finding that one way is the hard part for me.
>
> Lately, I'm bothered that R (or computers in general?) allows too many
> ways to do the same thing that work SOME of the time. Without a very
> deep understanding of the terminology, users are bewildered.
>
> Go read ?plotmath. Do we see "as.name"? NO. Why does the idiom
> expression(paste()) work as well? (Don't answer, that's a rhetorical
> question).
>
> There are too many ways to do the same thing. Or, well, too many of us
> know one way that works sometime and don't find out it doesn't always
> work until, as Bill says, it is buried in the bottom of some big
> function that behaves erratically.
>
> Gabor notes this works (sometimes):
>
> plot(0, xlab = parse(text = xNm))
Actually, I was pointing out that that expression was as good as a
longer expression that was posted and it always works (not just
sometimes) if one interprets the problem as supplying the character
representation of a plotmath expression in xNm -- this seems the
logical generalization given that the example was the character
representation of a plotmath expression.
--
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com
More information about the R-help
mailing list