Я делаю блестящее приложение, которое фильтрует и суммирует много данных.
Это работает по большей части. Но я ограничен законами, ограничивающими то, что отображается на графиках, поэтому я отфильтровываю все, что ниже 5 (как видно в коде). Это приводит к тому, что некоторые переменные отображаются как ноль, и поскольку у меня есть текст в add_trace, он выдает ошибка (столбец text
должен иметь длину 0, а не 1).
Я пытаюсь найти текстовый вывод, если график пуст, или предотвратить появление ошибки.
Это также может помочь мне, если я смогу просто визуализировать что-то еще (пользовательское сообщение), если вывод выдаст ошибку.
Вот воспроизводимый пример,
Ошибка появится, если вы смените школу на Хогвартс.
Мои данные:
mydata <- structure(list(year = c("2001", "2002", "2001", "2002", "2001","2002", "2001", "2002", "2001", "2002", "2001", "2002", "2001", "2002", "2001", "2002", "2001", "2002", "2001", "2001", "2002"), school = structure(c(2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Beauxbatons", "Hogwarths"), class = "factor"), grade = c(67, 69, 72, 90, 75, 85, 13, 45, 12, 90, 75, 85, 13, 45, 12, 67, 69, 72, 67, 69, 72), magic = structure(c(1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("black", "white"), class = "factor")), row.names = c(NA, -21L), class = c("tbl_df", "tbl", "data.frame"))
мое блестящее приложение:
library(shiny)
library(tidyverse)
ui <- fluidPage(
selectInput("school",
label = h3("Choose a school"),
choices = levels(mydata$school)
),
### Choose type of magic
selectInput("magic",
label = "Choose magic type",
choices = levels(mydata$magic)),
plotlyOutput("plot_school")
)
server <- function(input, output) {
output$plot_school <- renderPlotly({
mydata %>%
filter(school == input$school, magic == input$magic) %>%
group_by(year) %>%
summarise(m = mean(grade), n=n()) %>%
filter(n > 5) %>%
plot_ly(type = "scatter") %>%
add_trace(
x = ~ year,
y = ~ m,
text = ~paste('number: ', n),
type = 'bar'
)
})
}
# Run the application
shinyApp(ui = ui, server = server)