[R] Legend/Substitute/Plotmath problem
Martin Maechler
maechler at stat.math.ethz.ch
Mon Oct 25 09:56:35 CEST 2004
>>>>> "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) ?
HTH,
Martin Maechler, ETH Zurich
More information about the R-help
mailing list