Автоматическое заполнение и выбор нескольких значений в текстовом поле

Можно ли выбрать несколько значений, используя автоматически завершенные строки, похожие на поиск тегов google search и Qaru в блестящем текстовом поле.

dataset<-cbind("John Doe","Ash","Ajay sharma","Ken Chong","Will Smith","Neo"....etc)

Я хочу выбрать несколько переменных из вышеуказанного набора данных в качестве автозаполнения в своем текстовом поле и передать его на мой сервер. R

ui.R

shinyUI(fluidPage(
  titlePanel("test"),

  sidebarLayout(
    sidebarPanel(
      helpText("text"),

      textInput("txt","Enter the text",""),
      #Pass the dataset here for auto complete

     ),

    mainPanel(
      tabsetPanel(type="tab",tabPanel("Summary"),textOutput("text2"))

    )
  )
))

server.R

# server.R

shinyServer(function(input, output) {

output$text2<- renderText({
paste("hello",input$txt)

 })


}
)

отредактированы

Я использовал select2input из shinysky для выбора mulitiple varialbes, но теперь я добавил кнопку отправки, чтобы получить выбранные значения вместе.

#ui.R
select2Input("txt","This is a multiple select2Input",choices=c("a","b","c"),selected=c("")),

actionButton("go","submit") 

Я хочу привязать выбранную опцию, если скажем, что пользователь выбрал a и c, то новая переменная

#server.R
input$go #if pressed submit button
var<-cbind("a","c")
output$text<-renderText({ print ("var")})

но это не работает

Ответ 1

Посмотрите shinysky пакет и textInput.typeahead. Вы также можете самостоятельно настроить стиль textinput. Изменить: Я добавил пример с select2Input из пакета shinysky также для справки

rm(list = ls())

library(shinysky)
library(shiny)

my_autocomplete_list <- c("John Doe","Ash","Ajay sharma","Ken Chong","Will Smith","Neo")

ui <- shinyUI(
  fluidPage(tags$style(type="text/css",".shiny-output-error { visibility: hidden; }",".shiny-output-error:before { visibility: hidden; }"),
            tags$style(type="text/css","#search { top: 50% !important;left: 50% !important;margin-top: -100px !important;margin-left: -250px 
                       !important; color: blue;font-size: 20px;font-style: italic;}"),         

            mainPanel(  
              # one way of doing it
              textInput.typeahead(id="search",
                                  placeholder="Type your name please",
                                  local=data.frame(name=c(my_autocomplete_list)),
                                  valueKey = "name",
                                  tokens=c(1:length(my_autocomplete_list)),
                                  template = HTML("<p class='repo-language'>{{info}}</p> <p class='repo-name'>{{name}}</p>")
              ),
              br(),br(),
              # using select2Input
              select2Input("select2Input1","",choices=c(my_autocomplete_list),type = c("input", "select"))
              )
  )
)

server <- function(input, output, session) {}
shinyApp(ui = ui, server = server)

введите описание изображения здесь

введите описание изображения здесь

Изменить 2 согласно запросу. Пожалуйста, оберните свои объекты в выражения reactive, как я сделал, например. var <- reactive({...}), чтобы вы могли повторно использовать те более поздние

rm(list = ls())

library(shinysky)
library(shiny)

my_autocomplete_list <- c("John Doe","Ash","Ajay sharma","Ken Chong","Will Smith","Neo")

ui <- shinyUI(
  fluidPage(sidebarPanel(select2Input("txt","",choices=c("a","b","c"),selected=c("")), br(),actionButton("go","submit"), width =2),
            mainPanel(textOutput('text'))
  )
)

server <- function(input, output, session) {

  var <- reactive({
    if(input$go==0){return()}
    isolate({
      input$go
      cbind("a","c")
    })
  })  
  output$text <- renderText({var()})
}
shinyApp(ui = ui, server = server)

Ответ 2

Намного проще использовать imho - использовать shiny::selectizeInput(). Это позволяет вам автоматически завершать ввод с помощью аргумента выбора.

rm(list = ls())

library(shiny)

my_autocomplete_list <- c("John Doe","Ash","Ajay sharma","Ken Chong","Will Smith","Neo")

ui <- shinyUI(
 selectizeInput(inputId = 'search',
                label = 'Search',
                choices = my_autocomplete_list,
                selected = NULL,
                multiple = TRUE, # allow for multiple inputs
                options = list(create = FALSE)) # if TRUE, allows newly created inputs
)

server <- function(input, output, session) {}
shinyApp(ui = ui, server = server)