12

当我尝试结合使用expressionwith do.calland时出现错误plot

 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

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

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

(并在 xaxis 中给出所需的 mu 字符)。

4

3 回答 3

14

你可以使用alist而不是list

p <- alist(xlab=expression(paste("Concentration (",mu,"M)")))
do.call(plot,c(y~x,p))
于 2013-08-16T19:45:52.367 回答
12

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

p <- list(xlab=quote(expression(paste("Concentration (",mu,"M)"))))
do.call("plot", c(y~x, p))
于 2013-08-16T19:46:27.600 回答
7

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

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)
于 2013-08-16T20:13:42.687 回答