2013-04-23 11 views
29

Originariamente creo questa interfaccia lucida che accetta un parametro "company id" e "date", ma qui abbiamo un problema: la maggior parte delle persone non conosce le società con le quali si lavora, solo il loro nome, cioè (McDonalds, Radioshack).Cambiare in modo interattivo selectInput choices

quindi voglio creare idealmente una funzione di ricerca come questo enter image description here

La mia idea attuale è quella di passare in una tabella compreso un elenco di tutte le nostre aziende partner e il loro ID di global.R. Quindi passare il textInput come variabili di ricerca ed eseguire la ricerca sul lato server. Tuttavia, mi perdo su come passare searchResults di nuovo nell'interfaccia utente su un pannello selectInput?

mio codice corrente:

ui.R

library(shiny) 

shinyUI(pageWithSidebar(


    sidebarPanel(

    textInput("nameSearch", "Or, Search for company name", 'McDonald'), 
    selectInput("partnerName", "Select your choice", list("searchResults"), 
    br(), 
    submitButton("Update View"), 
    br(), 

), 

server.R

shinyServer(function(input, output) { 

    #subTable 
    searchResult<- reactive({ 
    subset(partners, grepl(input$nameSearch, partners$name)) 
    }) 

    output$searchResults <- renderTable({ 
    searchResult[,1] 
    }) 

global.R

partners<- read.csv("partnersList.csv", fill=TRUE) 

partnersList è solo in questo formato

name   id 
------------------ 
    McDonalds  1 
    Wendy's   2 
    Bestbuy   3 

risposta

29

È necessario rendere reattiva l'interfaccia utente. Non ho provato questo (mancano i dati anche per questo), ma dovrei lavorare credo. In server.R aggiuntivo:

output$selectUI <- renderUI({ 
selectInput("partnerName", "Select your choice", searchResult()[,1]), 
}) 

E nel ui.R sostituire la selectInput con:

htmlOutput("selectUI") 
+0

Ho avuto successo con questo. Ecco un'alternativa che non ho provato: https://groups.google.com/forum/?fromgroups=#!topic/shiny-discuss/JGJx5A3Ge-A – GSee

+0

grazie a Sacha questo ha funzionato per me. GSee: quel nuovo sviluppo sarà fantastico !! –

+1

Questo non funziona in R Markdown. Qualche idea su come farlo in R Markdown? – NewNameStat

3

risposta da JC di Rstudio:

Certo, basta usare un textInput per la stringa di ricerca, e l'uso renderUI/uiOutput per effettuare una selezione dinamicaInput. Quindi il resto del codice può dipendere dal valore selectInput. (Assicurati di controllare per NULL o qualsiasi altra cosa quando si legge il valore selectInput, perché partirà senza alcun valore.)

6

In Shiny versione 0.8 (dove ho provato), in server.R aggiungere il seguente :

shinyServer(function(input, output, session) { 

    observe({ 
    # This will change the value of input$partnerName to searchResult()[,1] 
    updateTextInput(session, "partnerName", 
        label = "Select your choice", 
        value = searchResult()[,1]) 
    }) 

}) 

Ora la funzione all'interno shinyServer contiene ulteriori argomenti session.

È possibile saltare l'etichetta se non è necessario modificarlo.

Non è necessario modificare nulla in ui.R.

Problemi correlati