2014-06-05 6 views
8

So che utilizzano seguente codice posso creare normale menu a discesa lucido,Creare menu a discesa nella Shiny - R utilizzando i tag

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

che creerà seguente discesa

enter image description here

Ma io sono utilizzando condizionalePannello e per il quale sto compilando il tipo di menu a discesa in linea s qualcosa del genere

enter image description here

Sto utilizzando il seguente codice per generare questi menu.

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

Il mio problema è io non sono in grado di aggiungere elementi da questi menu a discesa. Ho provato valori o opzioni, ma questo non ha cambiato nulla.

Spero di aver fornito informazioni sufficienti, fatemi sapere se sono necessarie ulteriori informazioni.

risposta

5

È possibile fornire un elenco di tag a tagList. I tag necessari sono option tag con value attributi È possibile costruire questi usando 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) 
     } 
    }) 
    } 
)) 

Naturalmente si può semplicemente utilizzare selectInput all'interno del div ad esempio:

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

ha funzionato. Puoi spiegare cosa fa SIMPLIFY? Ho cercato di mantenerlo vero, ma in quel caso gli elementi non sono stati compilati ... Inoltre, qualsiasi idea su come posso rendere questo menu simile al normale menu SelectInput lucido. – vrajs5

+1

'SIMPLIFY = FALSE' interrompe' mapply' dalla creazione di una matrice dall'output e lascia l'output come una lista. Che aspetto ha il normale menu 'seleectInput'? – jdharrison

+0

Controlla la prima immagine ... Uno con scegli la tua immagine di input ... – vrajs5