运行以下代码时,我获得了Error in as.graphicsAnnot(text) : could not find function "bold"
。我该如何解决这个问题呢?
my.qq <- function(x, main=expression(bold(italic(F)~~"Q-Q plot")),
margs=list(side=3, cex=par("cex.main"), font=par("font.main"),
adj=par("adj"), xpd=NA), ...)
{
plot(qnorm(ppoints(n <- length(x))), sort(x), ...)
do.call(mtext, c(list(main), margs))
}
x <- rnorm(100)
my.qq(x)
my.qq(x, main=substitute(bold(italic(F)[N(mu.,s2.)]~~"Q-Q plot"), list(mu.=0, s2.=1))) # fails
我的目标是使用列表margs
向mtext()
传递额外的参数。这通常是使用...
完成的,但这些参数已经传递给了plot()
。
发布于 2012-12-21 09:07:00
本例中的substitute
返回语言对象,而不是表达式。表达式expression
在R
中使用松散,但是这里看起来mtext
需要一个expression
类的对象。
您可以通过在as.expression()
中包装substitute(...)
来确保这一点
my.qq(x, main=as.expression(substitute(bold(italic(F)[N(mu.,s2.)]~~"Q-Q plot"), list(mu.=0, s2.=1))))
或者更简单地通过传递一个表达式来替换(就像在正常的mtext
调用中需要的那样)
my.qq(x, main=substitute(expression(bold(italic(F)[N(mu.,s2.)]~~"Q-Q plot")), list(mu.=0, s2.=1)))
上面的两个示例都将生成
substitute
的帮助中有一条说明
当参数是表达式(...)时,
替换和引号通常会引起混淆。结果是对表达式构造函数的调用,并且需要用eval求值以给出实际的表达式对象。
但是,在这种情况下,不需要eval
https://stackoverflow.com/questions/13982856
复制相似问题