闪亮:如何输入用 double-quotes (") 分隔的文本字符串列表

Shiny: how to input a list of text strings that are delimited with double-quotes (")

我 运行 遇到了文本输入问题。默认似乎是 textInput() 函数输出带有“”的文本。我正在尝试将多个单词输入 textInput(),每个单词周围都有一个“”。例如:

而不是将 test1、test2、test3 输出为:"test1,test2,test3", 我要 "test1","test2","test3"

我尝试将 cat() 和 paste() 与 \ 结合使用来解决它,但 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")] 这行不通

您可以在 server.R 中使用 strsplit 来创建用于对数据框进行子集化的词向量。这是一个例子(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)