簡體   English   中英

閃亮的updateSliderInput:將雙端滑塊轉換為單端滑塊

[英]Shiny updateSliderInput: Convert double-ended to single-ended slider

我有一個像這樣的雙頭閃亮滑塊輸入:

sliderInput(inputId = "years",
                             label="Choose base year and target year",
                             min = 2015,
                             max = 2060,
                             value = c(2015,2060),
                             step = 1,
                             sep = ""
                 )

用戶上載值后,我想將滑塊的下端固定為某個值。 上端應仍可移動。 我嘗試通過使用updateSliderInput函數並僅為“值”屬性提供一個值來實現這一點(因此,該滑塊應成為常規的單端滑塊):

  observeEvent(upload(), {
    updateSliderInput(session, inputId = "years", min = base_year(), max = 2060, value = 2060)
  })

但是,這不起作用。 滑塊仍然是雙端的,並且兩個手柄都設置為2060。如何將雙端滑塊轉換為常規滑塊?

親切的問候,

雷金

這是另一個更接近您的問題的解決方案,在按下按鈕后僅觸發一次:

library(shiny)

ui <- fluidPage(
  uiOutput("Slider_UI"),
  conditionalPanel("input.fixLower == 0", {actionButton("fixLower", "Fix lower range")})
)

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

  fixedLower <- reactiveVal()

  observeEvent(input$fixLower, {
    fixedLower(min(isolate({input$years})))
  }, once = TRUE)

  output$Slider_UI <- renderUI({
    if(is.null(fixedLower())){
      sliderInput(inputId = "years",
                  label="Choose base year and target year",
                  min = 2015,
                  max = 2060,
                  value = c(2015, 2060),
                  step = 1,
                  sep = ""
      )
    } else {
      sliderInput(inputId = "years",
                  label="Choose base year and target year",
                  min = fixedLower(),
                  max = 2060,
                  value = fixedLower(),
                  step = 1,
                  sep = ""
      )
    }
  })

}

shinyApp(ui = ui, server = server)

如@DSGym所建議,這是使用renderUI的示例:

library(shiny)

ui <- fluidPage(
  radioButtons(inputId="type_select", label="Select slider type", choices = list("Standard slider", "Range slider")),
  uiOutput("Slider_UI")
)

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

  output$Slider_UI <- renderUI({
    req(input$type_select)

    if(input$type_select == "Range slider"){
      presetValues <- c(2015, 2060)
    } else {
      presetValues <- 2060
    }

    sliderInput(inputId = "years",
                label="Choose base year and target year",
                min = 2015,
                max = 2060,
                value = presetValues,
                step = 1,
                sep = ""
    )
  })

}

shinyApp(ui = ui, server = server)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM