R Shiny - 如何在renderText()输出中将字符串前置到textAreaInput()的每一行的开头?

时间:2017-09-20 23:56:55

标签: r shiny

我正在开发一个应用程序来自动化工作流程,我需要在每行用户输入的前面添加“#”。因此,如果用户输入:

Line1


Line4

我希望renderText()显示:

#' Line1


#' Line4

下面是需要更改的简单代码,以便在每行的开头添加“#”。我可以将它添加到第一行,只是不确定如何添加到其余部分。

if (interactive()) {

    ui <- fluidPage(
      textAreaInput("caption", "Caption", "Data Summary", width = "1000px"),
      verbatimTextOutput("value")
    )
    server <- function(input, output) {

        output$value <- renderText({ paste("#' ",input$caption, sep = "") })
    }
    shinyApp(ui, server)

}

1 个答案:

答案 0 :(得分:1)

基于正则表达式的条件粘贴来拯救。按新行拆分输入字符,然后按前缀&#39;#&#39;只有当有一个字母或数字并用换行符返回并打印回Shiny。

> if (interactive()) {
+     
+     ui <- fluidPage(
+         textAreaInput("caption", "Caption", "Data Summary", width = "1000px"),
+         verbatimTextOutput("value")
+     )
+     server <- function(input, output) {
+         
+         output$value <- renderText({ paste0(lapply(unlist(strsplit(input$caption,'\n')),function(x){ifelse(grepl('[A-z0-9]',x),paste0('#',x),x)}), collapse = '\n') })
+     }
+     shinyApp(ui, server)
+     
+ }