У меня есть функция stacked_plot()
, которая использует аккуратную оценку для построения сложенного графика. Я хотел включить его в свой пакет и сделать другую функцию из этого пакета для его вызова. Вот минимальный пример:
stacked_plot <- function(data, what, by = NULL, date_col = date){
by <- rlang::enquo(by)
what <- rlang::ensym(what)
date_col <- rlang::ensym(date_col)
data <- data %>%
dplyr::group_by(!!date_col, !!by) %>%
dplyr::summarise(!!what := sum(!!what, na.rm = TRUE)) %>%
dplyr::ungroup() %>%
tidyr::complete(!!date_col, !!by, fill = rlang::list2(!!what := 0))
p <- data %>%
ggplot2::ggplot(ggplot2::aes(!!date_col, !!what, fill = !!by)) +
ggplot2::geom_area(position = 'stack')
print(p)
}
#' @importFrom rlang .data
call_plot <- function() {
to_plot <- data.frame(date = rep(seq(lubridate::ymd('2020-01-01'),
lubridate::ymd('2020-03-30'),
by = '1 day'), each = 3)) %>%
dplyr::mutate(cat = rep(c('A', 'B', 'C'), 90), v1 = runif(270))
p <- to_plot %>%
stacked_plot(what = .data$v1, by = .data$cat)
return(p)
}
Включение stacked_plot()
в пакет работало нормально, и я могу вызвать его в интерактивном режиме. Однако call_plot()
после load_all()
приводит к ошибке. Вот вывод rlang::last_error()
:
rlang::last_error()
<error/rlang_error>
Only strings can be converted to symbols
Backtrace:
1. global::call_plot()
10. mmmtools::stacked_plot(., what = .data$v1, by = .data$cat)
11. rlang::ensym(what) R/stacked_plot.R:4:2
Run `rlang::last_trace()` to see the full context.
Я полагаю, что это связано с некоторой особенностью аккуратной оценки. Однако я не могу найти какой-либо источник информации об особенностях использования tidyeval
в пакетах R. Единственное, что я знаю, это то, что я не могу использовать переменные в кавычках напрямую и использовать шаблон .data$variable
, что я и сделал в call_plot()
.
Как я могу использовать Adjust stacked_plot()
, чтобы использовать его из других функций пакета?