Я хотел бы предоставить пользователю возможность реактивно выпадающего выбора (предложения по автозаполнению) в зависимости от того, какие данные он вводит.Пользовательский ввод и предложения автозаполнения должны быть в одном виджете.
Проблема в том, что у меня большой набор данных (1 миллион строк +), из которого пользователь должен иметь возможность выбирать имена.Поскольку предварительная загрузка этого большого набора данных приведет к замедлению работы приложения, я хотел бы работать с несколькими разделенными наборами данных, которые я загружаю в зависимости от первой буквы пользовательского ввода.
Цель состоит в том, чтобы предоставить что-то вроде textInputвиджет, где пользователь может начать вводить имя.В зависимости от первой буквы этого пользовательского ввода, я хотел бы представить пользователю предложения, из которых он должен иметь возможность выбирать.
К сожалению, это невозможно с:
- textInput (отсутствует раскрывающийся список с предложениями)
- selectInput / selectizeInput / select2Input (отсутствует возможность работать с непредварительно загруженные данные)
Вот мои неудачные трейлы с различными входными виджетами, чтобы заставить это работать.
library(shiny)
library(shinysky)
#ui
ui <- fluidPage(
#Text Input
textInput(inputId = "txtInput", label = "Text Input", value = NULL),
#Select Input
selectInput(inputId = "selectInput", label = "Select Input", choices = NULL),
#Selectize Input
selectizeInput(inputId = "selectizeInput", label = "Selectize Input", choices = NULL),
#Select2Input from shinysky
select2Input(inputId = "select2Input", label = "Select2 Input", choices = NULL)
)
#server
server <- function(input, output, session) {
#Create reactive values
rv <- reactiveValues()
#Function for loading specific data set
f.populate.values <- function(start.letter) {
data.set <- c()
if(start.letter == "a") {
#Example toy list
data.set <- c("aaa", "abc", "adb", "adf")
}
if(start.letter == "b") {
#Example toy list
data.set <- c("baa", "bbc", "bdb", "bdf")
}
return(data.set)
}
#Failed trials to update / generate a dropdown with the loaded data set from "f.populate.values"
observeEvent(input$txtInput, {
#Store loaded data depending on first typed character
rv$names <- f.populate.values(substring(input$txtInput, 1, 1))
#Trials to update suggestions in widgets
updateTextInput(inputId = "txtInput", value = rv$names, session = session)
updateSelectInput(inputId = "selectInput", choices = rv$names, session = session)
updateSelectizeInput(inputId = "selectizeInput", choices = rv$names, session = session)
updateSelect2Input(inputId = "select2Input", choices = rv$names, label = "Select 2 Input", session = session)
})
}
shinyApp(ui, server)