# [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