我正在 R 中构建一个闪亮的应用程序,并面临以下示例代码最能描述的问题:
library(shiny)
library(shinydashboard)
library(shinyBS)
library(dplyr)
library(lubridate)
library(DT)
ui <- fluidPage(
mainPanel(
h3("Table:"),
dataTableOutput("sample_table1")
)
)
server <- function(input, output, session) {
output$sample_table1 <- renderDataTable({ #
df <- head(mtcars, 5)
df$NEW_COL1 <- c("This is an example showing that this row will be displayed with a very wide height because this text is too long",
"hello","hello","hello","hello")
df$color <- "blue"
df$city <- "Kansas"
df$second_color <- "yellow"
df <- datatable(df,
filter = 'top',
rownames= FALSE,
options = list(scrollX = TRUE
, searching = FALSE
, pageLength = 5
))
})
}
cat("\nLaunching 'shinyApp' ....")
shinyApp(ui, server)
如果你运行这个应用程序,你会发现第一行的高度变得疯狂,因为“NEW_COL1”列中的字符串长度太长。 我的两个问题是:
有没有办法强制每行的高度为1(1意味着第二行的高度),无论NEW_COL1列中的字符串有多长?
如果第 1 点的答案是否定的,我想简单地对该行中的数据进行子串。在这种情况下,是否可以通过将鼠标悬停在表格的单元格上来查看每个单元格中的完整字符串?
我发现的一个相关帖子如下如何减少 DT 数据表中的行高,但那里提供的解决方案都无法满足我的需要。
对于第二个选项,您可以使用此问题中的代码:
df <- datatable(
df,
filter = 'top',
rownames = FALSE,
options = list(
scrollX = TRUE,
searching = FALSE,
pageLength = 5,
columnDefs = list(list(
targets = "_all",
render = JS(
"function(data, type, row, meta) {",
"return type === 'display' && data != null && data.length > 30 ?",
"'<span title=\"' + data + '\">' + data.substr(0, 30) + '...</span>' : data;",
"}"
)
))
)
)