【问题标题】:R shiny collapse long rows in data tableR闪亮折叠数据表中的长行
【发布时间】:2018-07-10 09:39:18
【问题描述】:

我有一个数据表,其中一些行中有很多文本。

我想做的是将行中文本的默认显示限制为 4 行,然后在单击该行以展开它或仅显示该特定行时。

library(shiny)
library(DT)

data <- data.frame(
  question = c("question1", "question2", "guestion3", paste0("A ", paste0(rep("very", 1000), collapse = " "), "long question"), "..."),
  answer = c("answer1", "answer2", paste0("A ", paste0(rep("very", 1000), collapse = " "), "long answer"),
             paste0("Another ", paste0(rep("very", 200), collapse = " "), "long answer"), "...")
)

ui <- fluidPage(
  DT::dataTableOutput(('DTOut'))
)

server <- function(input, output) {

  output$DTOut <- DT::renderDataTable({
    data
  })
}

shinyApp(ui = ui, server = server)

我尝试使用 max-height 和 toggle,但在那里不太成功。

【问题讨论】:

    标签: r datatable shiny


    【解决方案1】:

    这是来自DT 页面的解决方案。但它使用字符数和鼠标悬停在单元格上时显示的剩余文本。

    datatable(data, options = list(columnDefs = list(list(
      targets = c(1,2),
      render = JS(
       "function(data, type, row, meta) {",
       "return type === 'display' && data.length > 100 ?",
       "'<span title=\"' + data + '\">' + data.substr(0, 100) + '...</span>' : data;",
       "}")
    ))))
    

    【讨论】:

    • 当所需的列中有 NA 时,这会中断。使用前尝试dt[is.na(dt)] &lt;- ""
    • 显然options 中的代码在data 中的代码之前运行,这在Shiny 中具有重要的影响(如果您使用反应变量来定义“目标”),或者任何有顺序的地方可能很重要
    • @hedgedandlevered 如果您有新的实施/方案,那么请提出一个新问题并链接到这个问题,如果有帮助的话。
    • 我只是在评论这个问题的一些更具体的实现;我发现可能导致意外行为的极端情况。使用闪亮的人可能会使用此功能,所以只是在我遇到问题的地方提供帮助。如果你想提出一个新问题,我会回答。
    猜你喜欢
    • 2019-11-13
    • 2020-05-10
    • 2021-09-05
    • 2016-05-12
    • 2019-11-06
    • 2020-05-28
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多