[R] Multiple expressions, when using substitute()
Spencer Graves
spencer.graves at pdf.com
Tue Oct 11 17:08:14 CEST 2005
Thanks. spencer graves
John Maindonald wrote:
> 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:
>
>
>> Have you received a reply to this post? I couldn't find one,
>> and I couldn't find a solution, even though one must exist. I can
>> get the substitute to work in "main" but not "legend":
>>
>> B <- 2:3
>> eB <- substitute(y==a*x^b, list(a=B[1], b=B[2]))
>> plot(1:2, 1:2, main=eB)
>>
>> You should be able to construct it using "mtext", but I
>> couldn't get the desired result using legend.
>>
>> hope this helps.
>> spencer graves
>>
>> John Maindonald wrote:
>>
>>
>>
>>> expression() accepts multiple expressions as arguments, thus:
>>> plot(1:2, 1:2)
>>> legend("topleft",
>>> expression(y == a * x^b,
>>> "where "* paste(y=="wood; ",
>>> x=="dbh")))
>>> Is there a way to do this when values are to be substituted
>>> for a and b? i.e., the first element of the legend argument
>>> to legend() becomes, effectively:
>>> substitute(y == a * x^b, list(a = B[1], b=B[2]))
>>> 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.
>>> ______________________________________________
>>> R-help at stat.math.ethz.ch mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide! http://www.R-project.org/posting-
>>> guide.html
>>>
>>>
>>
>> --
>> Spencer Graves, PhD
>> Senior Development Engineer
>> PDF Solutions, Inc.
>> 333 West San Carlos Street Suite 700
>> San Jose, CA 95110, USA
>>
>> spencer.graves at pdf.com
>> www.pdf.com <http://www.pdf.com>
>> Tel: 408-938-4420
>> Fax: 408-280-7915
>>
>>
>
>
>
> 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.
>
--
Spencer Graves, PhD
Senior Development Engineer
PDF Solutions, Inc.
333 West San Carlos Street Suite 700
San Jose, CA 95110, USA
spencer.graves at pdf.com
www.pdf.com <http://www.pdf.com>
Tel: 408-938-4420
Fax: 408-280-7915
More information about the R-help
mailing list