使用函数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
替代,但我试图理解错误。
答案 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}}中强制执行的。