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

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



-- Roger D. Peng http://www.biostat.jhsph.edu/~rpeng/

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