Подтвердить что ты не робот

Добавление ggtitle через do.call, когда аргумент является языковым объектом

Рассмотрим простую функцию, которая добавляет ggtitle к grob

f <- function(PLOT, TITLE) {
  PLOT + ggtitle(TITLE)
}

Вызов функции напрямую работает так, как ожидалось.
Однако вызов функции через do.call(f, ..) вызывает ошибку, когда TITLE является объектом language

## Sample Data
TIT <- bquote(atop("This is some text",  atop(italic("Here is some more text"))))
P   <- qplot(x=1:10, y=1:10, geom="point")

## WORKS FINE
f(P, TIT)

## FAILS
do.call(f, list(P, TIT))
## Error in labs(title = label) : could not find function "atop"

Это, конечно, происходит только тогда, когда TIT является языковым объектом

TIT.char <- "This is some text\nHere is some more text"
do.call(f, list(P, TIT.char))
## No Error

Как do.call() можно использовать правильно, когда аргументы являются языковыми объектами?

4b9b3361

Ответ 1

Использование

do.call(f, list(P, TIT), quote=TRUE)

вместо этого. Проблема в том, что ваше выражение оценивается при запуске do.call. Установив quote=TRUE, он будет приводить аргументы, чтобы они не оценивались при передаче их в f. Вы также можете явно указать TIT

do.call(f, list(P, quote(TIT)))