Re: [R] Multiple expressions, when using substitute()

From: Spencer Graves <spencer.graves_at_pdf.com>
Date: Wed 12 Oct 2005 - 01:08:14 EST

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@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@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@pdf.com
>> www.pdf.com <http://www.pdf.com>
>> Tel:  408-938-4420
>> Fax: 408-280-7915
>>
>>

>
>
>
> John Maindonald email: john.maindonald@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@pdf.com
www.pdf.com <http://www.pdf.com>
Tel:  408-938-4420
Fax: 408-280-7915

______________________________________________
R-help@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
Received on Wed Oct 12 01:13:22 2005

This archive was generated by hypermail 2.1.8 : Sun 23 Oct 2005 - 18:40:33 EST