在一个闪亮的应用程序中,我正在开发服务器,定期使用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中设置的最小/最大设置,而不是用户可能选择的最小/最大范围。移动滑块读取最小值和最大值(如果可能)也不是一个选项,因为我需要在不更新滑块的情况下获取此信息。
答案 0 :(得分:2)
如果你想取最大值和最小值,你需要它们在sliderinput处的位置,所以:
最小值为input$slider[1]
,最大值为input$slider[2]
或input$slider
,以获取您选择的当前值。
希望它有所帮助。
编辑:
如果您想获取或设置最大值或最小值,只需执行updateSliderInput
并自行更改。我的答案是获取您在滑块中选择的max
和min
值。否则,您可以将值移动到最终值,它将返回最大值或将其移动到开头,它将使用以下命令返回最小值:
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)