首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >plot()和do.call():当'...‘时如何将表达式传递给绘图标题是用在别的地方吗?

plot()和do.call():当'...‘时如何将表达式传递给绘图标题是用在别的地方吗?
EN

Stack Overflow用户
提问于 2012-12-21 08:56:17
回答 1查看 1K关注 0票数 2

运行以下代码时,我获得了Error in as.graphicsAnnot(text) : could not find function "bold"。我该如何解决这个问题呢?

代码语言:javascript
运行
复制
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

我的目标是使用列表margsmtext()传递额外的参数。这通常是使用...完成的,但这些参数已经传递给了plot()

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-21 09:07:00

本例中的substitute返回语言对象,而不是表达式。表达式expressionR中使用松散,但是这里看起来mtext需要一个expression类的对象。

您可以通过在as.expression()中包装substitute(...)来确保这一点

代码语言:javascript
运行
复制
my.qq(x, main=as.expression(substitute(bold(italic(F)[N(mu.,s2.)]~~"Q-Q plot"), list(mu.=0, s2.=1))))

或者更简单地通过传递一个表达式来替换(就像在正常的mtext调用中需要的那样)

代码语言:javascript
运行
复制
my.qq(x, main=substitute(expression(bold(italic(F)[N(mu.,s2.)]~~"Q-Q plot")), list(mu.=0, s2.=1)))

上面的两个示例都将生成

substitute的帮助中有一条说明

当参数是表达式(...)时,

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13982856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档