【问题标题】:plot() and do.call(): How to pass expressions to plot title when '...' is used otherwise?plot() 和 do.call():如果使用“...”,如何将表达式传递给绘图标题?
【发布时间】:2012-12-08 14:29:33
【问题描述】:

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

【问题讨论】:

    标签: r plot do.call plotmath


    【解决方案1】:

    substitute 在这种情况下返回一个语言对象,而不是一个表达式。表达式expressionR 中使用松散,但这里似乎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 不是必需的

    【讨论】:

    • Argh,我应该知道...非常感谢您的帮助(这么快)!
    猜你喜欢
    • 2023-02-24
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2019-12-13
    • 2014-01-02
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    相关资源
    最近更新 更多