#r #ggplot2 #shiny
#r #ggplot2 #блестящий
Вопрос:
Я пытаюсь написать блестящий модуль для отображения базового объекта ggplot. Я хотел бы иметь параметр «y_labels_type» для изменения меток осей, например:
scales::number_format( accuracy = 0.1)
если y_labels_type
не задано
или
scales::dollar_format(prefix = "", suffix = "u20ac")
if y_labels_type
равно «евро».
Возможно ли это? Пока мой код выдает ошибку:
Предупреждение: Ошибка в [: объект типа ‘closure’ не поддается подстановке 54: case_when 53: модуль [modules/basic_trend_plot.R#44] 48: Модуль вызова 47: сервер […/server.R#29] Ошибка в значении[[1]][rep(NA_integer_, m)]: объект типа ‘closure’ не поддается подстановке
basic_trended_plot_module_srv <- function(input, output, session,
data="data",
yaxis=y,
xaxis=x,
y_labels_type=NULL) {
y_labels_scale <- scales::number_format( accuracy = 0.1)
y_labels_scale = case_when(
y_labels_type == "euro" ~ scales::dollar_format(prefix = "", suffix = "u20ac")
)
output$trend_plot_out <- renderPlot({
plot <- data %>%
ggplot(
aes(x={{xaxis}},y={{yaxis}})
)
geom_area(color="dodgerblue4",fill="dodgerblue3",alpha=0.6)
scale_color_brewer(palette = "Greens")
scale_fill_brewer(palette = "Greens")
scale_y_continuous(labels = y_labels_scale )
#ggplotly(plot)
return(plot)
})
}
Ответ №1:
Получена очень глупая ошибка. Проблема заключалась в операторе case_when . Просто удалите его, и все будет работать нормально:
y_labels_scale <- scales::number_format( accuracy = 1, big.mark = ".", decimal.mark = " ")
if (!is.null(y_labels_type)){
if (y_labels_type == "euro") y_labels_scale <- scales::dollar_format(prefix = "", suffix = "u20ac")
}
output$trend_plot_out <- renderPlot({
plot <- data %>%
ggplot(
aes(x={{xaxis}},y={{yaxis}})
)
geom_area(color="dodgerblue4",fill="dodgerblue3",alpha=0.6)
scale_color_brewer(palette = "Greens")
scale_fill_brewer(palette = "Greens")
scale_y_continuous(labels = y_labels_scale )
#ggplotly(plot)
return(plot)
})