2014-02-27 102 views
6

我想顯示我的閃亮應用的內容取決於多選輸入的選定項目的數量。到目前爲止,我無法弄清楚做這件事的條件應該是什麼樣子。閃亮使用條件面板中選擇條件的數量

library(shiny) 

shinyUI(pageWithSidebar(
    headerPanel("select and conditional panel"), 
    sidebarPanel(
    selectInput(inputId = "someSelect", multiple=TRUE, label = "Genes:", choices = colnames(someDataFrame), selected = c("ESR1", "CD44")), 
), 
    mainPanel(
    conditionalPanel(
     condition="length(input.someSelect.selected) > 2", 
     tabsetPanel(
... 
    ) 
    ) 
) 
)) 

回答

3

您不能在條件面板的條件中使用R函數。我認爲你的情況應該是:input.someSelect.length > 2

+0

這是我的問題最簡單的辦法。 – mlist

5

這可能是一個有趣的問題,但我不喜歡conditionalPanel構造,因爲它將JavaScript邏輯輸入到R代碼中。相反,我更喜歡uiOutput(和相應的renderUI),它可以生成動態UI。雖然conditionalPanel只能處理相當簡單的條件,但動態UI方法可以創建基於更復雜邏輯的條件外觀,並且可以充分利用R的功能。但是,對變化做出響應的速度稍慢。

,如果你使用這種方法,您ui.r應該是這個樣子:

mainPanel(uiOutput("myConditionalPanel")) 

和你server.r看起來是這樣的:

output$myConditionalPanel = renderUI({ 
    if(length(input$someSelect)>2) { 
     ## some ui definitions here. for example 
     tabsetPanel(
      ... 
     ) 
    } else { 
     ## some alternative definitions here... 
    } 
}) 
+0

儘管在我的用例中比需要更復雜,但我同意這通常是解決此問題的更好方法。謝謝! – mlist

3

希望這可以幫助其他人具有相同問題我有......

使用上面的答案時,我試圖使一個條件面板只出現在selectInput中選擇2個或更多的項目時出現問題。 uiOutput/renderUi方法有問題,並且條件input.someSelect.length > 1即使在selectInput中未選擇任何內容時也會出現conditionalPanel。

隨着conditionPanel,我需要包括一個條件,檢查是否selectInput定義:
"input.someSelect != undefined && input.someSelect.length > 1"