当运行以下代码时,我得到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()
.
substitute
在这种情况下返回一个语言对象,而不是一个表达式。表达方式expression
被宽松地使用在R
,但是这里看来mtext
需要一个类的对象expression
.
您可以通过包装来确保这一点substitute(...)
in as.expression()
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)))
Both the examples above will produce
帮助中有一个注释substitute
当参数是表达式(...)时,替换和引用通常会引起混乱。结果是对表达式构造函数的调用,需要使用 eval 进行计算以给出实际的表达式对象。
然而在这种情况下eval
不需要
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)