Ответ 1
do.call
оценивает параметры перед запуском функции; попробуйте обернуть выражение в quote
:
p <- list(xlab=quote(expression(paste("Concentration (",mu,"M)"))))
do.call("plot", c(y~x, p))
Я получаю сообщение об ошибке при попытке комбинирования с помощью 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))
(и дает желаемый символ mu в xaxis).
do.call
оценивает параметры перед запуском функции; попробуйте обернуть выражение в quote
:
p <- list(xlab=quote(expression(paste("Concentration (",mu,"M)"))))
do.call("plot", c(y~x, p))
Вы можете использовать alist
, а не list
p <- alist(xlab=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)