Я хочу использовать аккуратное вычисление для facet_grid
ggplot, но не знаю, как разрешить отсутствующие аргументы?
ggplot2
3.0.0 представила функцию vars()
(см. новости ), чтобы использовать аккуратное вычисление, например, в facet_grid. Но мне непонятно, как обрабатывать отсутствующие/NULL аргументы?
В следующем коде, как мне сделать так, чтобы передача любого аргумента в wrap_by
(т. е. использование p + wrap_by()
) не возвращала ошибку?
library(ggplot2)
#> Registered S3 methods overwritten by 'ggplot2':
#> method from
#> [.quosures rlang
#> c.quosures rlang
#> print.quosures rlang
p <- ggplot(mtcars, aes(wt, disp)) + geom_point()
wrap_by <- function(...) {
facet_wrap(vars(...), labeller = label_both)
}
p + wrap_by() #ERROR!
#> Can't subset with `[` using an object of class NULL.
Вариант использования: я хочу иметь функцию для определения переменных фасета, но хочу сделать их необязательными.
fac_by <- function(var_fac1, var_fac2) {
facet_grid(rows=vars(!!enquo(var_fac1)),
cols=vars(!!enquo(var_fac2)))
}
p+ fac_by(vs, am)
p+ fac_by(var_fac1=vs) # won't work
Проблема здесь в том, что в идеале я бы разрешил либо строку, либо столбец, либо оба (в идеале также ни одного, хотя это не представляется возможным с facet_grid(NULL, NULL)
)