【问题标题】:Mutually dependent input sliders in R shinyR闪亮中的相互依赖的输入滑块
【发布时间】:2017-05-05 23:21:55
【问题描述】:

我尝试在一个闪亮的应用程序中制作两个相互依赖的输入滑块,但似乎无法正常工作。我计划在一个闪亮的应用程序中使用这种情况,并在这里用一个简化的“半空/满玻璃”示例来说明它,其中一个滑块应该显示玻璃满度和一个空度:

library(shiny)

ui =(pageWithSidebar(
  headerPanel("Glass fullness"),
  sidebarPanel(
    sliderInput("Full", "% water", min = 0, max = 1, value = 0.2),
    #display dynamic UI
    uiOutput("Empty")),
  mainPanel()
))

server = function(input, output, session){

  # make dynamic slider 
  output$Empty <- renderUI({
    sliderInput("Empty", "% air", min=0, max=1, value=1-input$Full)
  })

}

runApp(list(ui = ui, server = server))

我理解value = 0.2value=1-input$Full 导致上述代码仅使第二个滑块依赖于第一个滑块而不是相反。我的问题是我想让两者相互依赖。我尝试为 Full 添加一个 uiOutput("Full") 和动态滑块,但没有设法解决循环编码。

以上代码的结果如下:

Glass half empty/full screenshot

非常感谢任何帮助!

【问题讨论】:

    标签: r input shiny


    【解决方案1】:

    您好,在 UI 中定义您的滑块,并在需要时在服务器中更新它们:

    library(shiny)
    
    ui =pageWithSidebar(
      headerPanel("Glass fullness"),
      sidebarPanel(
        sliderInput(inputId = "Full", label = "% water", min = 0, max = 1, value = 0.2),
        sliderInput(inputId = "Empty", label = "% air", min = 0, max = 1, value = 1 - 0.2),
        uiOutput("Empty")),
      mainPanel()
    )
    
    server = function(input, output, session){
    
      # when water change, update air
      observeEvent(input$Full,  {
        updateSliderInput(session = session, inputId = "Empty", value = 1 - input$Full)
      })
    
      # when air change, update water
      observeEvent(input$Empty,  {
        updateSliderInput(session = session, inputId = "Full", value = 1 - input$Empty)
      })
    
    }
    
    shinyApp(ui = ui, server = server)
    

    【讨论】:

      【解决方案2】:

      这是因为在第二个滑块中你有:

      sliderInput("Empty", "% air", min=0, max=1, value=1-input$Full)
      

      其中值为1-input$Full,因此它确实取决于第一个,但在第一个滑块中值为0.2:

      sliderInput("Full", "% water", min = 0, max = 1, value = 0.2),
      

      由于这个0.2,与第二个没有关系。

      虽然,正如你提到的,你最终会得到循环依赖。

      【讨论】:

      • 感谢 Leo,我编辑了问题以更清楚地表明我理解代码的这些部分导致只有一个滑块依赖于另一个滑块。我试图找出如何使它们相互依赖。
      猜你喜欢
      • 2017-08-06
      • 2013-07-14
      • 2016-11-17
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 2023-04-01
      • 2017-04-01
      • 2018-07-15
      相关资源
      最近更新 更多