From: Bert Gunter <gunter.berton_at_gene.com>

Date: Thu, 26 Jun 2008 08:24:49 -0700

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.

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. Received on Thu 26 Jun 2008 - 15:28:29 GMT

Date: Thu, 26 Jun 2008 08:24:49 -0700

BDR failed to mention that his and Venables's book, S PROGRAMMING, is an excellent reference on many of these language issues (helped me a lot, anyway)even though, by now, some of it may be a bit dated.

Bert Gunter

Genentech Nonclinical Statistics

-----Original Message-----

From: r-help-bounces_at_r-project.org [mailto:r-help-bounces_at_r-project.org] On
Behalf Of baptiste Auguié

Sent: Thursday, June 26, 2008 5:54 AM

To: R Help

Subject: Re: [R] expression, strsplit, ...

OK, thanks to both of you for the clarifications. I guess part of my confusion came from the numerous functions and concepts involved in producing such labels:

- call vs string vs formula vs expression ...
- substitute, bquote, expression, "~", .(), ...

I take it as a good thing once you have some experience, as it probably gives several ways to cat a string. The "expense of clarity" in the use of "~" was useful for me complaining about the rather verbose syntax of some plotmath examples. I may try to produce some examples in the future for the R wiki to illustrate these particular annotation details.

Thanks again,

Baptiste

On 26 Jun 2008, at 12:07, Prof Brian Ripley wrote:

> On Thu, 26 Jun 2008, baptiste Auguié wrote:

*>
**>>
**>> On 25 Jun 2008, at 19:45, Gabor Grothendieck wrote:
**>>
**>>> Try this:
**>>> plot(1, xlab = ~ alpha / V * m^-3 * kg ^-2 * l^4)
**>>
**>>
**>> Thanks, I would never have expected this code to work, this is a
**>> mystery to me! Actually, I thought xlab wanted an expression, but
**>> it seems to be happy with a formula.
**>
**> From ?plotmath
**>
**> In most cases other language objects (names and calls) are
**> coerced
**> to expressions and so can also be used.
**>
**> A formula is a call:
**>
**>> mode(~ alpha / V * m^-3 * kg ^-2 * l^4)
**> [1] "call"
**>
**> That was just GG saving himself a few key strokes at the expense of
**> clarity:
**>
**> plot(1, xlab = expression(alpha / V * m^-3 * kg ^-2 * l^4))
**>
**> is what this is coerced to.
**>
**>
**>> Also, the handling of exponents is cleverer than I naively assumed.
**>
**> It is exactly as documented.
**>
**>> I think an example like the one above would make a nice addition
**>> to the plotmath documentation.
**>
**> I don't see what it adds to those already there.
**>
**>>
**>> One small thing bothers me: can one use a similar syntax and use
**>> something like bquote to substitute a variable?
**>
**> You use substitute() to do that:
**>
**>> substitute(alpha * aaa / V * m^-3 * kg ^-2 * l^4, list(aaa=a))
**> alpha * " some text "/V * m^-3 * kg^-2 * l^4
**>
**>> say,
**>>
**>> a <- " some text "
**>>
**>>> plot(1, xlab = ~ alpha * `a` / V * m^-3 * kg ^-2 * l^4)
**>>
**>> to produce,
**>>
**>>
**>>> plot(1, xlab = ~ alpha * " some text " / V * m^-3 * kg ^-2 * l^4)
**>>
**>> but I can't get either bquote, deparse, substitute, "``" to
**>> produce the desired substitution in this formula.
**>
**> You can't 'substitute' in a formula, but you can in the RHS of a
**> formula, form[[2]] in your case.
**>
**>> Many thanks,
**>>
**>> baptiste
**>>
**>>
**>>
**>>
**>>> On Wed, Jun 25, 2008 at 1:06 PM, baptiste Auguié
**>>> <ba208_at_exeter.ac.uk> wrote:
**>>>> DeaR list,
**>>>> I'm a bit lost in the behavior of substitute and co.
**>>>> I often use fairly long axis labels in my graphs (long to write,
**>>>> that is).
**>>>> Typically, they would contain some greek letters and units with
**>>>> exponents,
**>>>> as in:
**>>>>
**>>>>> xlab=expression(paste("text ", alpha, " / ", V,".", m^
**>>>>> {-3}, ".",
**>>>>> kg^{-2}, ".", l^{4}))
**>>>> To make this a bit prettier, I've attempted to mimic the
**>>>> behavior of the
**>>>> SIstyle latex package which defines a macro that cleverly parses an
**>>>> expression for units, exponents, etc. My code fails in putting
**>>>> together the
**>>>> unit, as seen in the example below:
**>>>>> makeUnits <- function(expr){ # formats the units
**>>>>> units.list <- strsplit(expr, "[[:blank:]]", perl=F)
**>>>>> expr.list <- strsplit(unlist(units.list), "\\^", perl=T)
**>>>>> units <- unlist(lapply(expr.list, function(unit) {
**>>>>> if (length(unit) == 2)
**>>>>> paste(unit[1],"^{",unit[2],"}",sep="")
**>>>>> else paste(unit,sep="")
**>>>>> }))
**>>>>> cat(units, sep=".")
**>>>>> }
**>>>>> expr <- "V m^-3 kg^-2 l^4"
**>>>>> makeUnits(expr) # this works, and produces:
**>>>> # V.m^{-3}.kg^{-2}.l^{4}
**>>>>> silab <- function(..., units=NULL){ # creates a valid
**>>>>> expression for xlab
**>>>>> and co.
**>>>>> dotCalls <- substitute(list(...))
**>>>>> nArgs <- length(dotCalls)
**>>>>> if (!is.null(units)) myUnits <- makeUnits(units)
**>>>>> if (!is.null(units)) return(substitute(paste(..., " / ",
**>>>>> myUnits)))
**>>>>> if (is.null(units)) return(substitute(paste(...)))
**>>>>> }
**>>>>> silab("text", alpha, units = "V m^-3 kg^-2 l^4") # the result is
**>>>>> obviously not what I want
**>>>>> par(mfrow=c(2, 1)) # comparison of the desired output and the
**>>>>> current one
**>>>>> plot(1:10, 1:10,
**>>>>> xlab=silab("text ", alpha, units = "V m^-3 kg^-2 l^4"),
**>>>>> ylab=silab("simple text"))
**>>>>> plot(1:10, 1:10,
**>>>>> xlab=expression(paste("text ", alpha, " / ", V,".", m^
**>>>>> {-3}, ".",
**>>>>> kg^{-2}, ".", l^{4})),
**>>>>> ylab="simple text")
**>>>> Any thoughts welcome!
**>>>> Sincerely,
**>>>> baptiste
**>>>> _____________________________
**>>>> Baptiste Auguié
**>>>> Physics Department
**>>>> University of Exeter
**>>>> Stocker Road,
**>>>> Exeter, Devon,
**>>>> EX4 4QL, UK
**>>>> Phone: +44 1392 264187
**>>>> http://newton.ex.ac.uk/research/emag
**>>>> http://projects.ex.ac.uk/atto
**>>>> ______________________________________________
**>>>> 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.
**>>
**>> _____________________________
**>>
**>> Baptiste Auguié
**>>
**>> Physics Department
**>> University of Exeter
**>> Stocker Road,
**>> Exeter, Devon,
**>> EX4 4QL, UK
**>>
**>> Phone: +44 1392 264187
**>>
**>> http://newton.ex.ac.uk/research/emag
**>> http://projects.ex.ac.uk/atto
**>>
**>> ______________________________________________
**>> 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.
**>
**> --
**> Brian D. Ripley, ripley_at_stats.ox.ac.uk
**> Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
**> University of Oxford, Tel: +44 1865 272861 (self)
**> 1 South Parks Road, +44 1865 272866 (PA)
**> Oxford OX1 3TG, UK Fax: +44 1865 272595
*

Baptiste Auguié

Physics Department

University of Exeter

Stocker Road,

Exeter, Devon,

EX4 4QL, UK

Phone: +44 1392 264187

http://newton.ex.ac.uk/research/emag

http://projects.ex.ac.uk/atto

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.

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. Received on Thu 26 Jun 2008 - 15:28:29 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Thu 26 Jun 2008 - 15:31:00 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*