From: Prof Brian Ripley <ripley_at_stats.ox.ac.uk>

Date: Thu, 26 Jun 2008 12:07:29 +0100 (BST)

Date: Thu, 26 Jun 2008 12:07:29 +0100 (BST)

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 272595Received on Thu 26 Jun 2008 - 11:10:50 GMT______________________________________________ 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.

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 - 13:31:17 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.
*