Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Interactive / Reactive change of min / max values of sliderInput

Tags:

r

shiny

I've found some information about how to change the value of a sliderInput with a reactive expression within the siderbarPanel. But instead of the value, I'd like to change min and max of the slider with a numericInput. In this script for server.R it says that only label and value can be changed for sliders. Is there any other possibility to change the min/max values of sliderInput with a reactive expression?

Here's an exmple:

ui.R:

shinyUI(pageWithSidebar(
  
  #Sidebar with controls to select the variable to plot
  sidebarPanel(
   
  #Numeric Inputs
    numericInput("min_val", "Enter Minimum Value", 1993),
    
    numericInput("max_val", "Enter Maximum Value", 2013),

  #Slider 
    sliderInput("inSlider", "Slider", 
                min=1993, max=2013, value=2000),

# Now I would like to change min and max from sliderInput
# by changing the numericInput.

  mainPanel()
))

server.R:

library(shiny)

shinyServer(function(input, output, session) {

  reactive({
    x<-input$min_val
    y<-input$max_val
    updateSliderInput(session, "inSlider", min=x, max=y, value=x)
  })
}
like image 534
viktor_r Avatar asked Sep 09 '13 14:09

viktor_r


1 Answers

I think this is best accomplished by using shiny's dynamic UI functions via renderUI() and uiOutput(). Try out the following example:

ui.R

library(shiny)

shinyUI(pageWithSidebar(
  headerPanel("Test Shiny App"),

  sidebarPanel(
    #Numeric Inputs
    numericInput("min_val", "Enter Minimum Value", 1993),
    numericInput("max_val", "Enter Maximum Value", 2013),
    #display dynamic UI
    uiOutput("slider")
  ),

  mainPanel()
))

server.R

library(shiny)

shinyServer(function(input, output, session) {

  #make dynamic slider
  output$slider <- renderUI({
    sliderInput("inSlider", "Slider", min=input$min_val, max=input$max_val, value=2000)
  })

})
like image 109
David Avatar answered Oct 21 '22 03:10

David