Table 来自文本输入的 R 闪亮多行行
R Shiny Multi Line Row In Table From Text Input
我希望在 table 的单行中显示多行文本。
文本来自文本区域输入,这意味着您可以添加多行文本。当显示在 table 中时,它会被重新格式化,删除多行。
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 行
table 中的条目是:
第1行第2行第3行第4行
我以为在renderDataTable
中添加escape = FALSE
会解决问题,但事实并非如此。是否有另一个 table 包可以更好地工作?是不是列定义为字符?
只需将表示字符串中新行的“/n”字符替换为相应的 html 标记即可。看看下面我的解决方案。
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)
我希望在 table 的单行中显示多行文本。
文本来自文本区域输入,这意味着您可以添加多行文本。当显示在 table 中时,它会被重新格式化,删除多行。
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 行
table 中的条目是:
第1行第2行第3行第4行
我以为在renderDataTable
中添加escape = FALSE
会解决问题,但事实并非如此。是否有另一个 table 包可以更好地工作?是不是列定义为字符?
只需将表示字符串中新行的“/n”字符替换为相应的 html 标记即可。看看下面我的解决方案。
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)