2016-02-08 2 views
7

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

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

Я хочу, чтобы выбрать несколько переменных из приведенного выше набора данных в качестве автоматического заполнения в моем текстовом поле и передать его на мой server.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) 

}) 


} 
) 

EDITED

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

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

actionButton("go","submit") 

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

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

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

+3

Ваша правка элементарный вопрос, вы должны прочитать на 'shiny', как эти вещи очень просто сделать. Я отредактирую свой вопрос еще раз, но в следующий раз отправлю новый вопрос –

ответ

11

Посмотрите в 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) 

enter image description here

enter image description here

Edit 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) 
+1

эй спасибо за указание на shinysky .. В шиниски эта функция 'select2Input()' более подходит для моего кода .. Еще раз спасибо – Eka

+0

Я добавил дополнительные сомнения в мой вопрос вы могли бы мне помочь? – Eka