访问sliderInput范围

时间:2018-04-12 13:35:21

标签: r shiny

在一个闪亮的应用程序中,我正在开发服务器,定期使用updateSliderInput更新sliderInput的最小/最大值。对于服务器上的后续计算,我需要知道滑块的当前最小/最大值是什么。闪亮是否有可能访问sliderInput对象的当前最小/最大值(在下面的示例中由输入$ slider $ max表示)?

library(shiny)

ui <- fluidPage(
      mainPanel(
         sliderInput("slider","Slider:", min = 1, max = 50, value = 30),
         selectInput("input","Input:",choices = c("a","b","c"))
      )
)

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

  updateSliderInput(session,"slider",max=round(abs(rnorm(1)*100)))
  observe(print(input$slider$max))

}

shinyApp(ui = ui, server = server)

我知道我可以引入一个单独的变量来跟踪最小/最大设置的状态,但是(如果可能的话)希望避免这些选项,因为它存在实际设置和存储的设置之间不同步的风险在跟踪变量中。

编辑:我正在寻找在sliderInput或updateSliderInput中设置的最小/最大设置,而不是用户可能选择的最小/最大范围。移动滑块读取最小值和最大值(如果可能)也不是一个选项,因为我需要在不更新滑块的情况下获取此信息。

2 个答案:

答案 0 :(得分:2)

如果你想取最大值和最小值,你需要它们在sliderinput处的位置,所以:

最小值为input$slider[1],最大值为input$slider[2]input$slider,以获取您选择的当前值。

希望它有所帮助。

编辑:

如果您想获取或设置最大值或最小值,只需执行updateSliderInput并自行更改。我的答案是获取您在滑块中选择的maxmin值。否则,您可以将值移动到最终值,它将返回最大值或将其移动到开头,它将使用以下命令返回最小值:

observe({
    print(input$slider)
    })

编辑2:

也许这就是你想要做的事情:

server <- function(input, output, session) {
  slidermax <- round(abs(rnorm(1)*100))
  updateSliderInput(session,"slider",max=slidermax)
  observe(print(slidermax))

}

答案 1 :(得分:1)

可以使用jQuery和shinyjs包(执行jQuery)。您需要编写一个自定义函数来检索当前设置的最大值(以下示例中为getMax)。如果您的滑块包含在具有固定标题mySlider的div中,您可以让jQuery找到该滑块:

$('#mySlider .irs-max').text());

返回当前设置的最大值。我使用一个按钮来执行该功能并提醒当前设置的最大值:

library(shiny)
library(shinyjs)

jQuery_max_code <- "shinyjs.getMax = function(){alert($('#mySlider .irs-max').text());}"

ui <- fluidPage(
  mainPanel(

    # make the function getMax() available to the browser
    useShinyjs(), 
    extendShinyjs(text=jQuery_max_code),

    # providing the slider an id so I can access it with jQuery: mySlider
    div(id = "mySlider", sliderInput("mySlider","Slider:", min = 1, max = 50, value = 30)),

    # a slider to change the max of our slider
    sliderInput("maxSlider","Max Value of above slider:", min = 1, max = 200, value = 30),

    # a button to alert the current max of mySlider
    actionButton("button", "Print slider maximum value")
  )
)

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

  # change value of mySlider 
  observeEvent(input$maxSlider, {
    updateSliderInput(session, "mySlider", max=input$maxSlider)
  })

  # alert the current max after button click
  observeEvent(input$button, {
    js$getMax()
  })
}

shinyApp(ui = ui, server = server)

enter image description here