Tidyeval оператор сплайсинга !!! терпит неудачу с aes ggplot - PullRequest
2 голосов
/ 23 апреля 2019

В статье, обсуждающей аккуратную оценку в ggplot2 , создается впечатление, что aes() теперь поддерживает квази-квотирование.Однако у меня возникают проблемы с его работой с оператором unquote-splice !!!.

library( ggplot2 )

## Predefine the mapping of symbols to aesthetics
v <- rlang::exprs( x=wt, y=mpg )

## Symbol-by-symbol unquoting works without problems
ggplot( mtcars, aes(!!v$x, !!v$y) ) + geom_point()

## But unquote splicing doesn't...
ggplot( mtcars, aes(!!!v) ) + geom_point()
# Error: Can't use `!!!` at top level
# Call `rlang::last_error()` to see a backtrace

(возможно, это неудивительно). То же самое происходит, если эстетическое отображение перемещается в geom:

ggplot( mtcars ) + geom_point( aes(!!v$x, !!v$y) )   # works
ggplot( mtcars ) + geom_point( aes(!!!v) )           # doesn't

Я что-то упускаю из виду?

1 Ответ

5 голосов
/ 23 апреля 2019

Это потому, что aes() принимает x и y аргументы, а !!! работает только в точках.Мы постараемся решить эту конкретную проблему в будущем.Тем временем вам нужно будет заключить в кавычки x и y по отдельности или использовать следующий обходной путь:

aes2 <- function(...) {
  eval(expr(aes(!!!enquos(...))))
}

ggplot(mtcars, aes2(!!!v)) + geom_point()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...