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

day*_*yne 12 plot expression r do.call

当我尝试,并结合使用,我得到一个错误expressiondo.callplot.

 x <- 1:10
 y <- x^1.5
Run Code Online (Sandbox Code Playgroud)

我只使用plot函数可以得到我想要的情节:

plot(y~x,xlab=expression(paste("Concentration (",mu,"M)")))
Run Code Online (Sandbox Code Playgroud)

但是,我想用我的情节来实现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
Run Code Online (Sandbox Code Playgroud)

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

do.call(plot,c(0,p))
Run Code Online (Sandbox Code Playgroud)

(并在xaxis中提供所需的mu字符).

jdh*_*son 13

你可以使用alist而不是list

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


Aar*_*ica 12

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

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

  • 你应该都停止在plotmath-`paste`中使用`sep`参数.充其量它们会被忽略,最糟糕的是它们会被放在表达式的末尾而不是你想要的位置. (2认同)

Jos*_*ien 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)
Run Code Online (Sandbox Code Playgroud)