2016-12-20 138 views
1

我嘗試在一個閃亮的應用程序中創建兩個相互依賴的輸入滑塊,但似乎沒有得到它的工作。我打算使用這種情況在一個閃亮的應用程序,以方便與簡化的「半杯空/滿」例如其中一個滑塊應顯示玻璃豐滿和一個emptyness這裏說明吧:在R閃亮的互相依賴的輸入滑塊

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

任何幫助,不勝感激!

回答

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

這是因爲在第二個滑塊您有:

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

其中value是1-input$Full因此它不依賴於第一位的,但在第一個滑塊值是0.2:

​​

由於這個0.2,與第二個沒有關係。

雖然如你所說,你最終會得到循環依賴。

+0

感謝獅子座,我編輯的問題,使之更加清楚,我理解的代碼導致這些部件只一個滑塊依賴於另一個。我試圖找出如何使它們相互依賴。 – adrbart