À l'origine, je crée cette interface brillante qui prend un paramètre "identifiant d'entreprise" et "date", mais ici nous avons un problème: la plupart des gens ne connaissent pas les entreprises avec lesquelles nous travaillons par leur identifiant, seulement leur nom, c'est-à-dire (McDonalds, Radioshack) .
Je veux donc idéalement créer une fonction de recherche comme celle-ci
Mon idée actuelle est de passer dans un tableau comprenant une liste de toutes nos entreprises partenaires et leurs identifiants à global.R. Passez ensuite textInput comme variables de recherche et effectuez la recherche côté serveur. Cependant, je me perds sur la façon de transmettre les résultats de la recherche dans l'interface utilisateur sur un panneau selectInput?
Mon code actuel:
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 est juste dans ce format
name id
------------------
McDonalds 1
Wendy's 2
Bestbuy 3
Vous devez rendre l'interface utilisateur réactive. Je n'ai pas testé cela (manquez de données pour cela aussi) mais devrait fonctionner je pense. Dans server.R
ajouter:
output$selectUI <- renderUI({
selectInput("partnerName", "Select your choice", searchResult()[,1] ),
})
Et en ui.R
remplacez selectInput par:
htmlOutput("selectUI")
Dans la version 0.8 de Shiny (où je l'ai testé), dans server.R
ajoutez ce qui suit:
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])
})
})
Maintenant, la fonction dans shinyServer
a un argument supplémentaire session
.
Vous pouvez ignorer l'étiquette si vous n'avez pas besoin de la modifier.
Vous n'avez rien à changer dans ui.R
.
Réponse du JC de Rstudio:
Bien sûr, utilisez simplement un textInput pour la chaîne de recherche et utilisez renderUI/uiOutput pour créer un selectInput dynamique. Ensuite, le reste de votre code peut dépendre de la valeur de selectInput. (Assurez-vous de vérifier NULL ou autre lors de la lecture de la valeur selectInput, car elle commencera sans valeur.)