It's not new anyway. You see the same behaviour with boxplot(dat, ylab=quote(X[2]))
and it boils down to the use of do.call("bxp", ...) in the internals. As a general matter, expression() exists to prevent this sort of confusion, e.g., in this construction, > X <- quote(Y+1); bquote(f(.(X))) f(Y + 1) is indistinguishable from just entering f(Y+1), so f has no way of detecting whether or not it is intended to evaluate Y + 1. The same thing is happening with do.call: call objects are being "spliced into" the generated call, and if they are not protected with expression, you have the trouble. I don't know whether it is worth trying to change this. You know the workaround. -pd > On 27 Mar 2020, at 02:55 , Marius Hofert <marius.hof...@uwaterloo.ca> wrote: > > Hi, > > Is this expected behavior (R-3.6.0)? > > dat <- cbind(x = 1:10, y = 10:1) > ylab <- substitute(X[t], list(t = 2)) > plot(dat, ylab = ylab) # works (correctly displays ylab) > boxplot(dat, ylab = ylab) # fails > boxplot(dat, ylab = as.expression(ylab)) # works > > Thanks & cheers, > M > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel -- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Office: A 4.23 Email: pd....@cbs.dk Priv: pda...@gmail.com ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel