使用bquote()进行轴标记时出错

时间:2015-08-04 13:50:54

标签: r

使用函数bquote进行轴标记时,我遇到了一个奇怪的错误。只有在将标签(希腊符号" mu")应用于y轴时才会出现错误:

df <- data.frame(x=1:10, y=1:10)
plot(y~x, df, t="l", xlab=bquote(.("Size [")*mu*m*.("]"))) # works
plot(y~x, df, t="l", ylab=bquote(.("Size [")*mu*m*.("]"))) # doesn't work
# Error in plot.default(1:10, 1:10, ylab = "Size [" * mu * m * "]", xlab = quote("x"),  : object 'mu' not found

我知道在这种情况下我可以使用expression替代,但我试图理解错误。

1 个答案:

答案 0 :(得分:2)

这是由于评估规则的细微之处以及该绘图功能的实施细节。

请注意,不使用公式界面

时不会发生这种情况
plot(df$x,df$y, type="l", ylab=bquote(.("Size [")*mu*m*.("]"))) #works as you expect

要查看正在发生的事情,请检查来源

getAnywhere("plot.formula")

你会看到相当于这个简化的例子

plotex<-function(x,y,type="l",ylab,...) {
  m=match.call(expand.dots = FALSE)
  dots <- lapply(m$..., eval)
  dots$xlab <- enquote(dots$xlab)
  do.call(plot,c(list(x=x,y=y,type=type,ylab=ylab),dots))
}

xlab参数位于...中,并使用明确的enquote进行评估。 ylab是一个命名参数,其评估是通过包含在提供给list的{​​{1}}中强制执行的。