2015-11-13 2 views
0

У меня возникает проблема с текстовыми вводами. По-умолчанию функция textInput() выводит текст с помощью" вокруг него. Я пытаюсь передать несколько слов в textInput() с «» вокруг каждого слова. Например:Shiny: как вводить список текстовых строк, разделенных двойными кавычками («)

вместо вывода test1, test2, test3 as: «test1, test2, test3», I «test1», «test2», «test3»

Я попытался использовать комбинацию cat() и paste() с помощью \ to обходной путь, но не кажется, что функция renderDatatable() принимает это.

Это то, что я пытался до сих пор:

ui<- fluidPage(
    textInput(inputId = "words", 
       label = "Enter search terms, separated by commas", 
       value = ""), 
    titlePanel("List of Claims"), 
    fluidRow(
     dataTableOutput(outputId = "table") 
    ) 

) 
server <- function(input,output){ 

    reactivedata <- reactive({ 
     input$words 
    }) 

    output$table <- renderDataTable({ 
     inputtext<-function(x) {paste(eval(parse(text=input$words)))} 
     claiminfo2$xxtotal <-rowSums(claiminfo2[,inputtext(X)]) 
     claiminfo3 <- claiminfo2[,c(1,length(claiminfo2))] 
     claiminfo4 <- subset(claiminfo3,claiminfo3[,2] >0) 
     claiminfo4 
    }) 

} 

shinyApp(ui = ui, server = server) 

claiminfo2 термин матрица документ со словами, как заголовки столбцов. Я пытаюсь использовать его так, чтобы пользователь вводил слова, а затем приложение ищет эти столбцы на claiminfo2[,c(words)]. Однако, вместо того, чтобы claiminfo2[,c("word1","word2")], я получаю claiminfo2[,c("word1 , word2")], который не будет работать

+3

Вы должны добавить небольшой воспроизводимый пример (небольшое блестящее приложение), чтобы мы могли тестировать решения. – LyzandeR

+1

это достаточно хорошо? –

ответ

1

Вы можете, возможно, использовать strsplit в вашем server.R создать вектор слов, чтобы использовать для Подменю вашего dataframe. Вот пример (ui.R неизменна):

claiminfo2 <- data.frame(a=letters[1:4],b=letters[5:8],d=letters[9:12]) 
    server <- function(input,output){ 

      output$table <- renderDataTable({ 
        claiminfo2[,unlist(strsplit(input$words,",")),drop=FALSE] 

      }) 

Другие варианты, чтобы использовать selectize вход, это даст предложения пользователей о том, что столбцы в кадре данных. Вот пример:

library(shiny) 
claiminfo2 <- data.frame(a=letters[1:4],b=letters[5:8],d=letters[9:12]) 

ui<- fluidPage(
     titlePanel("List of Claims"), 
     fluidRow(
       dataTableOutput(outputId = "table") 
     ), 
     selectInput(inputId = "words", 
         label = "Enter search terms, separated by commas", 
         choices=colnames(claiminfo2), multiple=TRUE, selectize=TRUE) 

) 
server <- function(input,output){ 

     output$table <- renderDataTable({ 
       if(!is.null(input$words)){ 
       claiminfo2[,unlist(strsplit(input$words,",")),drop=FALSE] 
       } 

     }) 

} 

shinyApp(ui = ui, server = server) 
Смежные вопросы