【问题标题】:R Shiny Multi Line Row In Table From Text Input来自文本输入的表格中的R闪亮多行行
【发布时间】:2021-12-17 04:56:51
【问题描述】:

我希望在表格的单行中显示多行文本。

文本来自文本区域输入,这意味着您可以添加多行文本。当显示在表格中时,它会重新格式化,删除多行。

MRE:

library(shiny)
library(DT)
library(shinyWidgets)

ui <- fluidPage(
    titlePanel("Multi-line row in Shiny Table"),
        mainPanel(
            # Add Text
            textAreaInput(inputId = "Long_Text", label = "TEXT:", rows = 5, resize = "both"), br(),
            
            actionButton("Add_text", "New Text"), br(),
            
            # Display Text as Table
            DT::dataTableOutput("Text_Table")
        )
)

server <- function(input, output, session) {

    # Generate Reactive Text Data
        Text_DF <- reactiveValues(data = data.frame(Text = character()))
    
    # Add New Text
        observeEvent(input$Add_text, {
            # Combine New Text With Old Text
            Text_DF$data <- rbind(Text_DF$data, data.frame(Text = input$Long_Text))
        })
    
    # Generate Table
        output$Text_Table = renderDataTable({
            Text_DF$data
        }, escape = FALSE)
}

# Run the application 
shinyApp(ui = ui, server = server)

例如,如果您输入:

第 1 行

第 2 行

第 3 行

第 4 行

表中的条目是:

第 1 行 第 2 行 第 3 行 第 4 行

我认为将escape = FALSE 添加到renderDataTable 会解决它,但它没有。是否有另一个可以更好地工作的表包?是不是把列定义为字符?

【问题讨论】:

    标签: r shiny dt


    【解决方案1】:

    只需用相应的html标签替换代表字符串中新行的“/n”字符即可。看看我下面的解决方案。

    library(shiny)
    library(DT)
    library(stringr)
    
    ui <- fluidPage(
      titlePanel("Multi-line row in Shiny Table"),
      mainPanel(
        # Add Text
        textAreaInput(inputId = "Long_Text", label = "TEXT:", rows = 5, resize = "both"), br(),
        
        actionButton("Add_text", "New Text"), br(),
        
        # Display Text as Table
        DT::dataTableOutput("Text_Table")
      )
    )
    
    server <- function(input, output, session) {
      
      # Generate Reactive Text Data
      Text_DF <- reactiveValues(data = data.frame(Text = character()))
      
      # Add New Text
      observeEvent(input$Add_text, {
        # Combine New Text With Old Text
        Text_DF$data <- rbind(
          Text_DF$data, 
          data.frame(Text = str_replace_all(input$Long_Text, "\n", "<br>")) # Here the hack
          )
      })
      
      # Generate Table
      output$Text_Table = renderDataTable({
        Text_DF$data
      }, escape = FALSE)
    
    }
    
    # Run the application 
    shinyApp(ui = ui, server = server)
    

    【讨论】:

      猜你喜欢
      • 2016-03-23
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多