【问题标题】:Access sliderInput range访问滑块输入范围
【发布时间】:2018-09-22 16:37:29
【问题描述】:

在一个闪亮的应用程序中,我目前正在开发服务器,使用 updateSliderInput 定期更新滑块输入的最小值/最大值。对于服务器上的后续计算,我需要知道滑块的当前最小/最大值是什么。是否有任何可能访问sliderInput 对象的当前最小值/最大值(在下面的示例中由 input$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 中设置的最小/最大设置,而不是用户可能选择的最小/最大范围。移动滑块以读取最小值和最大值(如果可能)也不是一个选项,因为我需要在不更新滑块的情况下获取此信息。

【问题讨论】:

标签: r shiny


【解决方案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)

【讨论】:

【解决方案2】:

如果您想获取最大值和最小值,您将需要它们在滑块输入中的位置,因此:

最小值为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))

}

【讨论】:

  • observe(print(input$slider[2])) 在我上面的示例中返回 NA。
  • 如何通过 updateSliderInput 获取最大值或最小值?我知道我可以这样设置,但我正在寻找一种方法来获取当前设置。
  • 可以设置不获取。
  • 已编辑,现在对我有用,希望这是你想要的。
猜你喜欢
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 2015-12-25
  • 2020-10-16
  • 2013-06-25
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多