R Shiny: как отключить / включить слайдер с помощью флажка?

#r #checkbox #shiny #slider

#r #флажок #блестящий #слайдер

Вопрос:

Следующий код выдает пример с тремя ползунками и тремя флажками.

Если установлен один флажок, ползунок ниже должен быть отключен. Это означает, что выбранное значение больше не должно изменяться ползунком.

Кроме того, сумма всех значений слайдера не должна превышать максимальное значение, в данном случае 10.

 library(shiny)

u <- shinyUI(fluidPage(
    titlePanel("title panel"),
    sidebarLayout(position = "left",
                  sidebarPanel("sidebar panel",
                               checkboxInput("check1", "disable/enable", value = T),
                               sliderInput("slider1","value 1",min=1,max=10,value=3),
                               checkboxInput("check2", "disable/enable", value = F),
                               sliderInput("slider2","Value 2",min=1,max=10,value=3),
                               checkboxInput("check3", "disable/enable", value = F),
                               sliderInput("slider3","Value 3",min=1,max=10,value=3)
                  ),
                  mainPanel("main panel")
                  )))

s <- shinyServer(function(input, output){})
shinyApp(u,s)
  

Комментарии:

1. смотрите disable и enable из library(shinyjs) .

Ответ №1:

Возможно, это удовлетворит ваши потребности

 u <- fluidPage(
                useShinyjs(),
                sidebarPanel("sidebar panel",
                             checkboxInput("check1", "disable/enable", value = F),
                             uiOutput("slidr1"),
                             checkboxInput("check2", "disable/enable", value = F),
                             uiOutput("slidr2"),
                             checkboxInput("check3", "disable/enable", value = F),
                             uiOutput("slidr3")
                ),
                mainPanel("main panel")

)

s <- function(input, output, session){
  
  output$slidr1 <- renderUI({
    sliderInput("slider1","Value 1",min=1,max=8,value=3)
  })
  
  output$slidr2 <- renderUI({
    req(input$slider1)
    max2 <- reactive({9-(input$slider1 )})
    sliderInput("slider2","Value 2",min=1,max=max2(),value=3)
  })
  
  output$slidr3 <- renderUI({
    req(input$slider1,input$slider2)
    max3 <- reactive({10-(input$slider1   input$slider2)})
    sliderInput("slider3","Value 3",min=1,max=max3(),value=3)
  })
  
  
  # Want the initial state of this button to be disabled?
  #shinyjs::disable(id="slider1")
  observeEvent(input$check1,{
    if (input$check1) shinyjs::disable(id="slider1")  
    else shinyjs::enable(id="slider1") 
  })
    
  observeEvent(input$check2,{
    if (input$check2) shinyjs::disable(id="slider2")  
    else shinyjs::enable(id="slider2") 
  })
  
  observeEvent(input$check3,{
    if (input$check3) shinyjs::disable(id="slider3") 
    else shinyjs::enable(id="slider3") 
  })
  
}

shinyApp(ui=u, server=s)