【问题标题】:Shiny: how to input a list of text strings that are delimited with double-quotes (")闪亮:如何输入用双引号(“)分隔的文本字符串列表
【发布时间】:2023-04-02 16:41:01
【问题描述】:

我遇到了文本输入问题。默认似乎是 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")] 不行

【问题讨论】:

  • 您应该添加一个可重现的小示例(一个闪亮的小应用),以便我们测试解决方案。
  • 这样够好吗?
  • 你可以看到这个page对你的问题有一个很好的回答!

标签: r text shiny textinput


【解决方案1】:

您可以在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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 2019-06-22
    相关资源
    最近更新 更多