substitute/paste question for using Greek in plot titles
This is not a bug. The object passed to `main' should be either character or an
expression (documented in ?title). substitute() returns neither a character
object nor an expression -- it return a call object. This is documented in
?substitute:
Substituting and quoting often causes confusion when the argument
is 'expression(...)'. The result is a call to the 'expression'
constructor function and needs to be evaluated with 'eval' to give
the actual expression object.
What you want, I think, is
label <- substitute(expression(paste("A vaue for ",phi," = ",phival)),
list(phival=phi.1))
plot(0 ~ 0, main = eval(label))
-roger
Sundar Dorai-Raj wrote:
Peter Dunn wrote:
Hi all I am having troubles making sense of why code (1) below fails but code (2) below works. Code (1):
> phi.1 <- 1 > plot(0 ~ 0,
+ main=substitute(paste("A vaue for ",phi," = ",phival),
list(phival=phi.1)) )
Error in paste("The two deviances for ", phi, " = ", 2) :
Object "phi" not found
But this works:
Code (2):
> plot(0,0,
+ main=substitute(paste("A value for ",phi," = ",phival),
list(phival=phi.1)) )
>
It appears that if the plot command takes the formula style entry, the substitue/paste fails. Is this documented as a feature (I couldn't find it if that is the case), or is it a bug? If it is a feature, it is a subtle difference between (1) and (2) that has potential to be quite frustrating! Perhaps I should just upgrade to version 2.0.0, though I can't see anything in the Release Notes that might cause this. Thanks. P.
> version
_ platform i686-pc-linux-gnu arch i686 os linux-gnu system i686, linux-gnu status major 1 minor 9.1 year 2004 month 06 day 21 language R
Peter,
Because in the first couple of lines of plot.formula we see this:
dots <- m$...
dots <- lapply(dots, eval, data, parent.frame())
which for your case is equivalent to:
expr <- substitute(paste("A vaue for ",phi," = ",phival),
list(phival=phi.1))
eval(expr)
which returns an error saying "phi" cannot be found which is the correct
behaviour of eval. I'll let others comment on whether or not this is a
bug in plot.formula but you can always get around it by calling title:
plot(0 ~ 0)
title(main = expr)
which is exactly what your second example is doing in plot.default.
HTH,
--sundar
______________________________________________ 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
Roger D. Peng http://www.biostat.jhsph.edu/~rpeng/