如何组合do.call()plot()和expression()

时间:2013-08-16 19:41:14

标签: r plot expression do.call

当我尝试使用expressiondo.callplot合并时,我收到了错误消息。

 x <- 1:10
 y <- x^1.5

我只能使用plot函数来获取我想要的图:

plot(y~x,xlab=expression(paste("Concentration (",mu,"M)")))

但是,我想使用do.call实现我的情节。我有一个很长的参数列表存储为列表p。但是,当我尝试将列表传递给do.call时,我收到以下错误:

p <- list(xlab=expression(paste("Concentration (",mu,"M)")))
do.call(plot,c(y~x,p))
Error in paste("Concentration (", mu, "M)") : 
  object 'mu' not found

我还尝试在传递给do.call的args中明确定义公式。即。 do.call(plot,c(formula=y~x,p))。我不明白为什么我收到错误 - 特别是因为以下内容没有出错:

do.call(plot,c(0,p))

(并在x轴中提供所需的mu字符)。

3 个答案:

答案 0 :(得分:13)

您可以使用alist而不是list

p <- alist(xlab=expression(paste("Concentration (",mu,"M)")))
do.call(plot,c(y~x,p))

答案 1 :(得分:12)

do.call在运行函数之前评估参数;尝试将表达式包装在quote

p <- list(xlab=quote(expression(paste("Concentration (",mu,"M)"))))
do.call("plot", c(y~x, p))

答案 2 :(得分:7)

设置quote=TRUE也有效。它实际上阻止了do.call()在将args传递给what给出的函数之前对其进行评估。

x <- 1:10
y <- x^1.5
p <- list(xlab=expression(paste("Concentration (",mu,"M)",sep="")))

do.call(what = "plot", args = c(y ~ x, p), quote = TRUE)