我想创建一个范围滑块,在此范围内选择滑块的一端会更新同一滑块的另一端。我知道诀窍在于观察一端的更改并使用它来更新另一端。但是,我的行为是滑块来回翻转,我无法弄清为什么它没有沉降。
在此示例中,我希望将滑块居中放置在0-100比例尺内,以便将input$slider[1]
设置为10
时,input$slider[2]
移至90
,并且当input$slider[2]
被移至80
时,input$slider[1]
被移至20
。下面的示例(越野车)代码:
library(shiny)
ui <- fluidPage(
uiOutput("slidertest"),
verbatimTextOutput("values")
)
server <- function(input, output, session) {
sliderends <- reactiveValues(end=c(NULL,NULL))
observe({
sliderends$end[1] <- 100-input$slider[2]
})
observe({
sliderends$end[2] <- 100-input$slider[1]
})
output$slidertest <- renderUI({
sliderInput("slider","Update Ends?", min = 0, max=100, value=c(sliderends$end[1],sliderends$end[2]))
})
output$values <- renderText({paste(input$slider[1], input$slider[2], sliderends$end[1], sliderends$end[2], sep=";")})
}
shinyApp(ui, server)
对于我在做什么错和工作建议的解释将不胜感激。
谢谢!
答案 0 :(得分:0)
您的滑块输入似乎陷入了无限循环。
input$slider[1]
更改→input$slider[2]
更改→input$slider[1]
更改......
您可以使用reactiveValues
来检查sliderinput
的起始值或sliderinput
的结束值是否已更改,然后使用updateSliderInput
来更新{ {1}}。
请参见以下代码:
sliderinput