2014-06-05 18 views
8

Ich weiß folgenden Code ich normales Dropdown-Menü in glänzend erstellen kann,Dropdown-Menüs in Shiny - R-Tags

selectInput("Input1", "Choose you Input:", choices = c('a1'='1','b2'='2')) 

die Drop-Down folgenden schaffen

enter image description here

Aber ich bin mit conditionalPanel und für die ich bevölkern Art von Inline-Dropdown-Menü s so etwas wie diese

enter image description here

Ich verwende folgenden Code, um diese Menüs zu generieren.

conditionalPanel(condition="input.conditionedPanels==3", 
        div(style="display:inline-block", 
         tags$label('Menu1', `for` = 'Sample'), 
         tags$select(id = 'Sample', class="input-small")), 
        div(style="display:inline-block", 
         tags$label('Menu2', `for` = 'Sample1'), 
         tags$select(id = 'Sample1', class="input-small"))) 

Mein Problem ist Ich bin nicht in der Lage Elemente dieses Drop-Down-Menü hinzuzufügen. Ich habe Werte oder Optionen ausprobiert, aber daran änderte sich nichts.

Ich hoffe, ich habe genug Informationen zur Verfügung gestellt, lassen Sie mich wissen, wenn weitere Informationen benötigt werden.

Antwort

5

Sie können eine Liste von Tags an tagList senden. Die Tags, die Sie brauchen, sind option Tags mit value Attribute Sie diese mapply

library(shiny) 

runApp(list(
    ui = bootstrapPage(
    numericInput('n', 'Enter 3 for condition', 3, 0, 10), 
    conditionalPanel(condition="input.n==3", 
        div(style="display:inline-block", 
         tags$label('Menu1', `for` = 'Sample'), 
         tags$select(id = 'Sample', class="input-small", 
            tagList(mapply(tags$option, value = 1:10, 
                paste0(letters[1:10], 1:10), 
                SIMPLIFY=FALSE))) 
        ), 
        div(style="display:inline-block", 
         tags$label('Menu2', `for` = 'Sample1'), 
         tags$select(id = 'Sample1', class="input-small", 
            tagList(mapply(tags$option, value = 1:2, 
                paste0(letters[1:2], 1:2), 
                SIMPLIFY=FALSE))) 
        ) 
    ) 
    , textOutput("cond") 
), 
    server = function(input, output) { 
    output$cond <- renderText({ 
     if(input$n == 3){ 
     paste0("Sample value selected =", input$Sample, " Sample1 value selected =",input$Sample1) 
     } 
    }) 
    } 
)) 

Natürlich mit konstruieren können Sie einfach selectInput innerhalb des div zum Beispiel verwenden können:

library(shiny) 

runApp(list(
    ui = bootstrapPage(
    numericInput('n', 'Enter 3 for condition', 3, 0, 10), 
    conditionalPanel(condition="input.n==3", 
        div(style="display:inline-block", 
         selectInput("Sample", "Choose you Input:", choices = c('a1'='1','b2'='2')) 
        ), 
        div(style="display:inline-block", 
         tags$label('Menu2', `for` = 'Sample1'), 
         tags$select(id = 'Sample1', class="input-small", 
            tagList(mapply(tags$option, value = 1:2, 
                paste0(letters[1:2], 1:2), 
                SIMPLIFY=FALSE))) 
        ) 
    ) 
    , textOutput("cond") 
), 
    server = function(input, output) { 
    output$cond <- renderText({ 
     if(input$n == 3){ 
     paste0("Sample value selected =", input$Sample, " Sample1 value selected =",input$Sample1) 
     } 
    }) 
    } 
)) 
+0

Es funktionierte. Kannst du erklären, was SIMPLIFY macht? Ich habe versucht, es wahr zu halten, aber in diesem Fall Artikel nicht gefüllt ... Auch keine Ahnung, wie kann ich dieses Menü aussehen wie normal glänzend selectInput Menü. – vrajs5

+1

'SIMPLIFY = FALSE' stoppt' mapply' vom Erstellen eines Arrays aus der Ausgabe und überlässt die Ausgabe als Liste. Wie sieht das normale glänzende Menü 'selectInput' aus? – jdharrison

+0

Überprüfen Sie das erste Bild ... Eins mit wählen Sie Ihre Eingabe Bild ... – vrajs5