Формат чисел с условными масштабами в функции ggplot

#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)
})