当我尝试将expression
与do.call
和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
我还尝试在传递给do.call
的参数中显式定义公式。即do.call(plot,c(formula=y~x,p))
。我不明白为什么我会出现错误,尤其是因为以下内容没有给出错误:
do.call(plot,c(0,p))
(并在xaxis中给出所需的mu字符)。
您可以使用alist
而不是list
p <- alist(xlab=expression(paste("Concentration (",mu,"M)")))
do.call(plot,c(y~x,p))
do.call
在运行函数之前评估参数;尝试将表达式包装在quote
:中
p <- list(xlab=quote(expression(paste("Concentration (",mu,"M)"))))
do.call("plot", c(y~x, p))
设置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)