2013-04-23 1 views
29

Первоначально я создаю этот блестящий интерфейс, который принимает параметр «идентификатор компании» и «дата», но здесь у нас есть проблема: большинство людей не знают компании, с которыми мы работаем по их идентификатору, только их имя, т.е. (McDonalds, Radioshack).Взаимодействовать с выбором selectInput

Так что я хочу, чтобы в идеале создать функцию поиска, как этот enter image description here

Моя текущая идея должна пройти в таблице в том числе список всех наших компаний-партнеров и их идентификаторами в global.R. Затем передайте в textInput в качестве переменных поиска и выполните поиск на стороне сервера. Тем не менее, я заблудился о том, как передать поисковые запросы обратно в пользовательский интерфейс на панели selectInput?

Мой текущий код:

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 только в этом формате

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

ответ

29

Необходимо активировать пользовательский интерфейс. Я не тестировал это (пропустите данные для него тоже), но должен работать, я думаю. В server.R добавить:

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

И ui.R заменить selectInput с:

htmlOutput("selectUI") 
+0

У меня был успех с этим. Вот альтернатива, которую я не пробовал: https://groups.google.com/forum/?fromgroups=#!topic/shiny-discuss/JGJx5A3Ge-A – GSee

+0

спасибо, что Sacha это сработало для меня. GSee: эта новая разработка будет потрясающей! –

+1

Это не работает в R Markdown. Любые идеи о том, как это сделать в R Markdown? – NewNameStat

3

Ответить с JC Rstudio в:

Конечно, просто использовать TextInput для строки поиска и использования renderUI/uiOutput сделать динамический selectInput. Затем остаток ваш код может зависеть от значения selectInput. (Убедитесь в том, чтобы проверить на NULL или что-то при чтении значения selectInput, потому что будет начать без значения.)

6

В блестящей версии 0.8 (где я тестировал), в server.R добавить следующее :

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]) 
    }) 

}) 

Теперь функция в shinyServer имеет дополнительный аргумент session.

Вы можете пропустить метку, если вам не нужно ее менять.

ничего не должно изменяться в ui.R.