У меня есть двусторонний блестящий ползунок, например:
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)
хорошее решение. ОП, если вы хотите сохранить значения, подумайте о том, чтобы сохранить их с помощью reactiveValues
Можно ли использовать
renderUI
и uiOutput для архивации?