[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