我尝试在闪亮的应用程序中制作两个相互依赖的输入滑块,但似乎无法让它工作。我计划在一个闪亮的应用程序中使用这种情况,并在这里用简化的“半空/全玻璃”来轻松说明。例如,一个滑块应显示玻璃丰满度和一个空白度:
window.location = "my-account.php";
我理解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.2
导致上面的代码只是为了使第二个滑块依赖于第一个而不是相反的方式。我的问题是我想让两者互相依赖。我尝试添加一个uiOutput(&#34; Full&#34;)&amp;动态滑块为Full但无法解决循环编码问题。
上述代码的结果如下:
Glass half empty/full screenshot
任何帮助非常感谢!
答案 0 :(得分:2)
您可以在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)
答案 1 :(得分:0)
这是因为在第二个滑块中你有:
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,与第二个没有关系。
虽然如你所说,你最终会得到循环依赖。