Martin Maechler wrote:

"Johannes" == Johannes Graumann <[EMAIL PROTECTED]>
   on Sat, 23 Oct 2004 11:04:25 -0700 writes:
"Johannes" == Johannes Graumann <[EMAIL PROTECTED]>
   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

______________________________________________
[EMAIL PROTECTED] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to