2

我正在尝试将交互式、可排序的表放入使用 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。关于如何解决这个问题的任何线索?

4

1 回答 1

0

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

#+ 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) 

它现在工作正常。

于 2018-11-14T10:21:53.513 回答