2

运行以下代码时,我获得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().

4

1 回答 1

3

substitute在这种情况下,返回一个语言对象,而不是一个表达式。该表达式expression在中使用松散R,但在这里似乎mtext需要一个类对象expression

您可以通过包装来确保这substitute(...)一点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)))

上面的两个例子都会产生 在此处输入图像描述

帮助中有一个注释substitute

当参数是表达式(...)时,替换和引用通常会引起混淆。结果是对表达式构造函数的调用,需要用 eval 求值以给出实际的表达式对象。

但是在这种情况下eval不需要

于 2012-12-21T01:06:59.627 回答