来自文本输入的表格中的R闪亮多行行
Posted
技术标签:
【中文标题】来自文本输入的表格中的R闪亮多行行【英文标题】:R Shiny Multi Line Row In Table From Text Input 【发布时间】: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
会解决它,但它没有。是否有另一个可以更好地工作的表包?是不是把列定义为字符?
【问题讨论】:
【参考方案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)
【讨论】:
以上是关于来自文本输入的表格中的R闪亮多行行的主要内容,如果未能解决你的问题,请参考以下文章