Отображать сообщение об ошибке, когда вызов API возвращается пустым в Shiny? - PullRequest
0 голосов
/ 25 октября 2018

У меня есть интерактивная визуализация, которая подключается к API данных полиции города.

Когда выбраны определенные комбинации входных данных, мой вызов API возвращается пустым, и я получаю неприятное красное сообщение об ошибке (так как мои вводимые данные недоступны).

Может кто-нибудь сказать мне, как отобразить более информативное сообщение об ошибке в виде строки «нет инцидентов, соответствующих вашему выбору, пожалуйста, попробуйте еще раз»?Я хотел бы, чтобы это сообщение об ошибке отображалось как showNotification, а мой ggplot не отображался.

Ниже приведена крайне урезанная версия того, что я делаю.Обратите внимание, что при выборе комбинации, такой как «AVONDALE» и «CHEMICAL IRRITANT», диаграмма отображается, тогда как при выборе комбинации, такой как «ENGLISH WOODS» и «TASER-BEANBAG-PEPPERBALL-40MM FOAM», возвращается сообщение об ошибке.Это сообщение об ошибке, к которому я хотел бы обратиться с предупреждением showNotification.

Обратите внимание, что при этом используется API Socrata, поэтому пакет RSocrata должен быть установлен и загружен.

install.packages("RSocrata")
library(shiny)
library(reshape2)
library(dplyr)
library(plotly)
library(shinythemes)
library(tibble)
library(RSocrata)

# Define UI for application that draws a histogram
ui <- fluidPage(
  navbarPage("Example", 
             theme = shinytheme("united"),
             tabPanel("Plot",
                      sidebarLayout(
                        sidebarPanel(

                          # neighborhood selector
                          selectizeInput("neighbSelect", 
                                         "Neighborhoods:", 
                                         choices = c("AVONDALE", "CLIFTON", "ENGLISH WOODS"), 
                                         multiple = FALSE)),

                          # incident description selector
                          selectizeInput("incSelect", 
                                         "Incident Type:", 
                                         choices = c("CHEMICAL IRRITANT", "TASER-BEANBAG-PEPPERBALL-40MM FOAM"), 
                                         multiple = FALSE))
                        ),

                        # Output plot
                        mainPanel(
                          plotlyOutput("plot")
                        )
                      )
             )

# Define server logic
server <- function(input, output) {
  forceInput <- reactive({
    forceInput <- read.socrata(paste0("https://data.cincinnati-oh.gov/resource/e2va-wsic.json?$where=sna_neighborhood= '", input$neighbSelect, "' AND incident_description= '", input$incSelect, "'"))
  })

# Render plot
  output$plot <- renderPlotly({
    ggplot(data = forceInput(), aes(x = sna_neighborhood)) +
      geom_histogram(stat = "count")
  })
}

# Run the application 
shinyApp(ui = ui, server = server)

Большое спасибо за любую помощь, которую может предложить каждый!

1 Ответ

0 голосов
/ 25 октября 2018

Я собираюсь привести пример с библиотекой shinyalert для всплывающего окна.Здесь я добавил выборку TEST, чтобы указать отсутствие данных:

#install.packages("RSocrata")
library(shiny)
library(reshape2)
library(dplyr)
library(plotly)
library(shinythemes)
library(tibble)
library(RSocrata)
library(shinyalert)

# Define UI for application that draws a histogram
ui <- fluidPage(
  useShinyalert(),
  navbarPage("Example", 
             theme = shinytheme("united"),
             tabPanel("Plot",
                      sidebarLayout(
                        sidebarPanel(

                          # neighborhood selector
                          selectizeInput("neighbSelect", 
                                         "Neighborhoods:", 
                                         choices = c("AVONDALE", "CLIFTON", "ENGLISH WOODS","TEST"), 
                                         multiple = FALSE)),

                        # incident description selector
                        selectizeInput("incSelect", 
                                       "Incident Type:", 
                                       choices = c("CHEMICAL IRRITANT", "TASER-BEANBAG-PEPPERBALL-40MM FOAM"), 
                                       multiple = FALSE))
             ),

             # Output plot
             mainPanel(
               plotlyOutput("plot")
             )
  )
)

# Define server logic
server <- function(input, output,session) {

  forceInput <- reactive({
    forceInput <- read.socrata(paste0("https://data.cincinnati-oh.gov/resource/e2va-wsic.json?$where=sna_neighborhood= '", input$neighbSelect, "' AND incident_description= '", input$incSelect, "'"))

    if(nrow(forceInput)==0){
      shinyalert("Oops!", "No data returned", type = "error")
      forceInput <- NULL
    }
    forceInput
  })

  # Render plot
  output$plot <- renderPlotly({
    req(forceInput())
    ggplot(data = forceInput(), aes(x = sna_neighborhood)) +
      geom_histogram(stat = "count")
  })
}

# Run the application 
shinyApp(ui = ui, server = server)

enter image description here

...