Skip to content
Prev 78762 / 398502 Next

Multiple expressions, when using substitute()

Yes, I did get a very helpful reply from Marc Schwartz.  I have
had substitute() working in legend(), when the legend argument
has length one.  The challenge was to find some way to do the
equivalent of substitute() when several expressions appear in
parallel, as may be required for legend().

The trick is to use bquote() to do the substitution.  The resulting
quoted expression (of mode "call") can then be an element in a
list, along with other quoted (or bquoted) expressions.   The
list elements, when passed to expression() via the args
argument of do.call(), become unquoted expressions.

Note that bquote() uses a syntax for the substitution of variables
that is different from that used by substitute().  It would be useful
to include some such example as below on the help page for
bquote():


library(DAAG)
Acmena <- subset(rainforest, species="Acmena")
plot(wood~dbh, data=Acmena)
Acmena.lm <- lm(log(wood) ~ log(dbh), data=Acmena)
b <- round(coef(Acmena.lm), 3)
arg1 <- bquote(italic(y) == .(A) * italic(x)^.(B),
                    list(A=b[1], B=b[2]))
arg2 <- quote("where " * italic(y) * "=wood; " *
                           italic(x) * "=dbh")
legend("topleft", legend=do.call("expression", c(arg1, arg2)),
                bty="n")

John Maindonald.
On 11 Oct 2005, at 11:41 AM, Spencer Graves wrote:

            
John Maindonald             email: john.maindonald at anu.edu.au
phone : +61 2 (6125)3473    fax  : +61 2(6125)5549
Centre for Bioinformation Science, Room 1194,
John Dedman Mathematical Sciences Building (Building 27)
Australian National University, Canberra ACT 0200.