[R] Legend/Substitute/Plotmath problem
Uwe Ligges
ligges at statistik.uni-dortmund.de
Mon Oct 25 12:57:08 CEST 2004
Martin Maechler wrote:
>>>>>>"Johannes" == Johannes Graumann <graumann at caltech.edu>
>>>>>> on Sat, 23 Oct 2004 11:04:25 -0700 writes:
>>>>>>"Johannes" == Johannes Graumann <graumann at caltech.edu>
>>>>>> on Sat, 23 Oct 2004 11:04:25 -0700 writes:
>
>
> Johannes> Hello,
>
> Johannes> I seem unable to construct a legend which contains
> Johannes> a substitution as well as math symbols. I'm trying
> Johannes> to do the following:
>
> >> strain2 <- "YJG48"
>
> >> legend.txt <- c(
> >> substitute(
> >> strain *
> >> %==% *
> >> "YJG45, rpn10" *
> >> %Delta%,
> >> list(strain=strain2)
> >> ),
> >> "Verhulst/Logistic",
> >> "Malthus"
> >> )
>
>
> Johannes> .....................
>
> Do try to break down a problem into simple things --
> particularly when you have problems!
>
> This substitute() call is simply invalid:
>
> > ss <- substitute( strain * %==% * "YJG45, rpn10" * %Delta%, list(strain=strain2) )
> Error: syntax error
>
> and the 'syntax error' should give you a clue:
> The first argument of substitute must be a syntactically correct
> R expression.
>
> Now you try more and more simple things till you 'see it' :
>
> Why should I expect 'A * %==% B' to be valid syntax?
> Both '*' and '%==%' are (diadic) operators: You can't juxtapose
> them, as well as you can't write 'A * = B'.
> Then, '%Delta%' (like any other '%foo%' !!) is a diadic operator
> too and hence can't be juxtaposed to '*'. But I'm pretty sure
> you rather mean (greek) 'Delta'.
>
> Hence:
> ss <- substitute( strain %==% "YJG45, rpn10" * Delta, list(strain=strain2) )
>
> ---
>
> Once you have the expression you can go further;
> still step by step :
>
> > c(ss, "Verhulst")
> [[1]]
> "YJG48" %==% "YJG45, rpn10" * Delta
>
> [[2]]
> [1] "Verhulst"
>
> Hmm, a list; that won't work.
> You do need to pass either a "character" vector or an
> expression, i.e., an expression of length 3 in our case.
> We must build the expression somewhat manually:
>
> > e <- expression(1, "Verhulst", "Malthus")# '1' is a place holder
> expression(1, "Verhulst", "Malthus")
> > e[[1]] <- ss ## that's the trick!
>
> > str(e)
> expression("YJG48" %==% "YJG45, rpn10" * Delta, "Verhulst", "Malthus")
>
> > plot(1); legend(1,1, leg = e)
>
> ---
>
> Maybe something to be added as an example to help(legend) or rather
> to help(expression) ?
Martin, a small example is given in the Help Desk in R News 2 (3). Maybe
you want to include it ...
Uwe
> HTH,
> Martin Maechler, ETH Zurich
>
> ______________________________________________
> 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
More information about the R-help
mailing list