Интерактивное изменение выбора 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
Ответы
Ответ 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, потому что оно начнется без значения.)