【问题标题】:DT::datatables() generated html table shows display anomalies (missing characters) when column level search is usedDT::datatables() 生成的 html 表在使用列级搜索时显示显示异常(缺少字符)
【发布时间】:2019-04-15 09:17:10
【问题描述】:

我正在尝试将交互式、可排序的表格放入使用 R 脚本中的 rmarkdown::render 生成的 html 摘要中。为了生成表,我使用 DT 包中的 datatables() 。报告生成良好,表格看起来也不错,直到您进行列级过滤/搜索,然后显示一些有趣的问题。通过以下示例,我的问题将变得更加清晰。

#' ---
#' title: "Test"
#' author: test
#' output: 
#'   html_document:
#'     toc: true
#' ---

#' <style type="text/css">
#'   .main-container {
#'     max-width: 1200px;
#'     margin-left: auto;
#'     margin-right: auto;
#'   }
#' </style>

#' ### Test data

#+ setup, include=FALSE, echo=TRUE
require(dplyr)
require(DT)
knitr::opts_chunk$set(echo = TRUE)

#+ core_code, include=FALSE, echo=TRUE 
plants <- read.csv("https://vincentarelbundock.github.io/Rdatasets/csv/cluster/plantTraits.csv")
plants<- plants %>% 
  mutate( ID = paste0("ID_" , sprintf("%04d", 1:136)  )  ) %>%
  select(ID, X:unsp)

#+ test_table, echo = FALSE
datatable( plants ,
           extensions = c("Buttons" , "FixedColumns"),
           filter = 'top',
           options = list( autoWidth = TRUE , 
                           dom = 'Blftip',
                           pageLength = 100,
                           searchHighlight = TRUE,
                           buttons = c('copy', 'csv', 'print'),
                           scrollX = TRUE,
                           fixedColumns = list(leftColumns = 2)),
           class = c('compact cell-border stripe hover') ,
           rownames = FALSE) 

生成表格(截图):

如果我在 ID 列中搜索 048,它会显示正确的行,如下所示...

但是,如果我取消过滤器并将所有行恢复,则行 ID 列中缺少字符。

这会发生在我搜索的任何列或任何其他数据上。如果我使用主搜索框(在右上角),它不会发生。我在 Mac(OS X 10.11.6)上运行 RStudio(版本 1.1.463),但我已经在 Mac 上的 Chrome、Safari 和 RStudio 内置浏览器上测试了生成的 html 文件;以及 Win7 上的 Chrome 和 IE。关于如何解决这个问题的任何线索?

【问题讨论】:

  • 检查ID_0001 是否在别有用心的行中列出?过滤后您可能会有新的行顺序。
  • 只有 ID_0001 的一行,X == Aceca 的一行。问题是过滤被删除后,ID 中的前导零消失了,在屏幕截图的第 4 行中,ID 现在显示为 ID_0,它应该是 ID_0004。

标签: r r-markdown knitr dt knitr-spin


【解决方案1】:

这并不是真正的解决方案,而是更多地规避问题。由于没有建议,我开始禁用我正在使用的所有选项,结果发现是高亮搜索结果导致了问题。所以如果我这样做:

#+ test_table, echo = FALSE
datatable( plants ,
           extensions = c("Buttons" , "FixedColumns"),
           filter = 'top',
           options = list( autoWidth = TRUE , 
                           dom = 'Blftip',
                           pageLength = 100,
                           searchHighlight = FALSE,
                           buttons = c('copy', 'csv', 'print'),
                           scrollX = TRUE,
                           fixedColumns = list(leftColumns = 2)),
           class = c('compact cell-border stripe hover') ,
           rownames = FALSE) 

现在可以正常使用了。

【讨论】:

    猜你喜欢
    • 2019-05-11
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多