Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Display dropdown selections based on previous selections in RShiny

Tags:

r

shiny

I am new to RShiny. I want to populate RShiny dropdowns based previous selections. For E.g. in the image below, User first selects the 'route', upon which 'schedule' drop-down gets populated, then user selects 'schedule', then 'trip' drop-down is populated and user selects a 'trip' input.

enter image description here

This is my code:

library(shiny)
library("plotly")
library(lubridate)
require(rgl)
require(akima)
library(dplyr)
library(DT)

data335 <<- read.csv("final335eonly.csv")
#data335[c(2,4,5,8,9,10)] = lapply(data335[c(2,4,5,8,9,10)], as.numeric)


routes <<- as.vector(unique(data335[,'route_no']))

ui <- fluidPage(
  titlePanel("Demand Analysis"),

  selectInput("routeInput", "Select the route", choices = routes),
  selectInput("scheduleInput", "Select the schedule", c("")),
  selectInput("tripInput", "Select the trip", c(""))



)


server <- function(input, output, session) {

  observeEvent(input$routeInput,
    {

      x <<- input$routeInput
      updateSelectInput(session, "scheduleInput",
                        choices = data335[data335$route_no == input$routeInput, ]$schedule_no,selected = tail(x, 1)
                        )
      }
  )
  observeEvent(input$scheduleInput,
    {
      y <<- input$scheduleInput
      updateSelectInput(session, "tripInput",
                        choices = data335[(data335$route_no == input$routeInput & data335$schedule_no == input$scheduleInput), ]$trip_no,selected = tail(y, 1)
                        )
    }
  )


}
shinyApp(ui = ui, server = server)

The input csv file required is here:

Whenever I try to run this seemingly simple code, eventhough the UI appears, when I try to select the inputs in dropdown, RShiny crashes.

Can you please let me know what is causing this?

like image 295
honeybadger Avatar asked Oct 19 '25 18:10

honeybadger


1 Answers

The problem is happening because you are not giving unique values as choices. data335[data335$route_no == input$routeInput, ]$schedule_no have duplicate values which causes the crash.

Also, you are selecting the value of input$routeInput in your scheduleInput, which is not listed in the choice could be another reason for the crash.

Just commenting the two statements and adding unique to your choices resolves the crash.

Also as @parth pointed out in his comments why are you using <<- everywhere in your code, it not necessary. Although its not the cause of the crash, until and unless you want to share variables between sessions use of <<- inside the server is not a good practice.

Here is your code with the commented section with two selected arguments commented and unique added that works:

library(shiny)
library("plotly")
library(lubridate)
require(rgl)
require(akima)
library(dplyr)
library(DT)

data335 <<- read.csv("final335eonly.csv", stringsAsFactors = FALSE)


routes <<- as.vector(unique(data335[,'route_no']))

ui <- fluidPage(
  titlePanel("Demand Analysis"),

  selectInput("routeInput", "Select the route", choices = routes),
  selectInput("scheduleInput", "Select the schedule", c("")),
  selectInput("tripInput", "Select the trip", c(""))



)


server <- function(input, output, session) {

  observeEvent(input$routeInput,
               {

                 x <<- input$routeInput
                 updateSelectInput(session, "scheduleInput",
                                   choices =unique(data335[data335$route_no == input$routeInput, ]$schedule_no),#selected = tail(x, 1)
                 )
               }
  )
  observeEvent(input$scheduleInput,
               {
                 y <<- input$scheduleInput
                 updateSelectInput(session, "tripInput",
                                   choices = unique(data335[(data335$route_no == input$routeInput & data335$schedule_no == input$scheduleInput), ]$trip_no),#selected = tail(y, 1)
                 )
               }
  )


}
shinyApp(ui = ui, server = server)
like image 128
SBista Avatar answered Oct 22 '25 07:10

SBista



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!