这是因为c
- 函数不能连接通过bquote
返回的对象类型的多个实例。大多数人认为bquote
返回R表达式,但它不。它返回调用并且不会连接成列表。您需要将expression
函数应用于通过多次调用返回到bquote
的项目,以将它们放入“表达式”列表中。这是由托马斯·拉姆利在2005年解释上Rhelp:
legend("topleft",legend=do.call('expression',
list(bquote(R^{2} == .(r2)),
bquote("P-value" == .(pval))) ),
bty = "n")
有另一种方法,如果你wnat建立这种说法传说,这将允许与c()
一起串起表达式。重新定义bquote返回表达式:
bquote2 <- function (expr, where = parent.frame())
{
unquote <- function(e) if (is.pairlist(e))
as.pairlist(lapply(e, unquote))
else if (length(e) <= 1L)
e
else if (e[[1L]] == as.name("."))
eval(e[[2L]], where)
else as.call(lapply(e, unquote))
as.expression(unquote(substitute(expr)))
}
legend("topleft",
legend=c(bquote2(R^{2} ~ "=" ~.(r2)),
bquote2(paste("P-value =",pval))),
bty = "n")
啊!我认为它们是语言对象,但我不知道它们可以像这样组合。 –
如果bquote确实返回了一个表达式,我相信你可以使用'c',因为表达式列表是类似列表的对象。我会看看我是否可以对其代码进行修改。 –