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.
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?
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With