#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)