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.
On Sat, 2005-10-01 at 20:32 +1000, 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, Try this: a <- 5 b <- 3 L <- list(bquote(y == .(a) * x^.(b)), "where y = wood; x = dbh") plot(1:2, 1:2) legend(legend = do.call("expression", L), "topleft") Note the creation of the list 'L', which uses bquote() and then the .(Var) construct, where 'Var' are your variables to be replaced. Then in the legend() call, the use of do.call() to apply expression() to the elements of list 'L'. HTH, Marc Schwartz
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 > stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! 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 pdf.com <pdf.com> Tel: 408-938-4420 Fax: 408-280-7915