R Shiny 中的相互依赖输入滑块

adr*_*art 7 r input shiny

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

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))
Run Code Online (Sandbox Code Playgroud)

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

上面代码的结果如下:

玻璃半空/满截图

非常感谢任何帮助!

Vic*_*orp 6

嗨,在 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)
Run Code Online (Sandbox Code Playgroud)