Подтвердить что ты не робот

Интерактивное изменение выбора selectInput

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

Итак, я хочу идеально создать функцию поиска, подобную этой 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          2
    Bestbuy          3 
4b9b3361

Ответ 1

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

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

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

htmlOutput("selectUI")

Ответ 2

В версии Shiny версии 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.

Ответ 3

Ответ от Rstudio JC:

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