如何使滑块在闪亮中更具交互性?

How to make sliders more interactive in shiny?

目标

通过堆栈溢出搜索后,我发现了如何使滑块交互。但我想让他们互动更多。

假设我有一袋苹果。我选择里面有多少个苹果,例如10. 在这10个中,如果我说6个是好苹果,那么4个应该是坏苹果等等。反之,如果我确定6个是坏苹果,那么好的滑块应该限制在4个。

尝试

library(shiny)
library(dplyr)


ui <- navbarPage(
  
  tabPanel(title = "Bad Apples", 
           mainPanel(h3("A Few Bad Apples", align = "center"), 
                     sliderInput(inputId = "total", label = "Total Apples", min = 0, max = 10, value = 5),
                     uiOutput("goodApples"), 
                     uiOutput("badApples"))) 
  
)


server <- function(input, output) {
  
  output$goodApples <- renderUI({
    sliderInput("goodApples", "Good Apples", min=0, max=input$total, value=input$total/2)
  })
  
  output$badApples <- renderUI({
    sliderInput("badApples", "Bad Apples", min=0, max=input$total, value=input$total/2)
  })
  
}

# Run the app ----
shinyApp(ui = ui, server = server)

问题

在我的尝试中,我仍然可以移动与苹果总数不一致的好苹果和坏苹果滑块。此外,好苹果滑块不会影响坏苹果滑块。

如有任何帮助,我们将不胜感激。

你没有表现出 goodApples 和 badApples 之间的依赖关系。

试试这个

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

  output$goodApples <- renderUI({
    total <- isolate(input$total)
    sliderInput("goodApples", "Good Apples", min=0, max=total, value=total)
  })
  
  output$badApples <- renderUI({
    total <- isolate(input$total)
    sliderInput("badApples", "Bad Apples", min=0, max=total, value=(total-input$goodApples))
  })
    
  observeEvent(input$total, {
    updateSliderInput(session, "goodApples", max = input$total)
    updateSliderInput(session, "badApples", max=input$total, value = input$total-input$goodApples)
  }, ignoreInit = TRUE)
  
  observeEvent(input$badApples, {
    updateSliderInput(session, "goodApples", value = input$total-input$badApples)
  })
  
}