R: 如何在Shiny中初始化数据表FixedColumns javascript

R: How do you initialise datatables FixedColumns javascript in Shiny?

本文关键字:初始化 数据表 FixedColumns javascript Shiny      更新时间:2023-09-26

我正在尝试构建一个使用数据表FixedColumns插件的闪亮应用程序:

https://datatables.net/extensions/fixedcolumns/

我正在使用的数据测试将有大约100列,我想修复前五列,并允许用户滚动浏览其余列

https://datatables.net/release-datatables/extensions/FixedColumns/examples/two_columns.html

$(document).ready(function() {
    var table = $('#example').DataTable( {
        scrollY:        "300px",
        scrollX:        true,
        scrollCollapse: true,
        paging:         false
    } );
    new $.fn.dataTable.FixedColumns( table, {
        leftColumns: 2
    } );
} );

我不知道javascript,但在过去我可以使用I()插入javascript选项。不过这次看起来我需要做点别的。我尝试了下面的代码,得到消息:"错误:选项必须是命名列表"。

library(shiny)
library(ggplot2)
data(diamonds)
hw <- diamonds
runApp(
  list(ui=(
    fluidPage(
      tabsetPanel(
        id = 'dataset',
        tabPanel('hw', dataTableOutput('mytable1'))
      ))),
    server = (function(input, output, session) {
      output$mytable1 <- renderDataTable(
        head(hw, 50), 
        options = list(scrollY = '300px',
                       scrollX = TRUE,
                       scrollCollapse = TRUE,
                       paging = FALSE,
                       I("new $.fn.dataTable.FixedColumns( table, {
                        leftColumns: 5
                        } );")
                       ))

    })
  ))

如果最近有人遇到这个问题,您现在可以直接使用FixedColumns扩展,而不需要任何javascript:

https://rstudio.github.io/DT/extensions.html

m = as.data.frame(round(matrix(rnorm(100), 5), 5))
datatable(
  m, extensions = 'FixedColumns',
  options = list(
    dom = 't',
    scrollX = TRUE,
    fixedColumns = TRUE
  )
)
list(tags$head(tags$script('type = "text/javascript"', '
        $(document).ready( function () {
            var table = $("#example").DataTable( {
                "scrollY": "300px",
                "scrollX": "100%",
                "scrollCollapse": true,
                "paging": false
            } );
            new $.fn.dataTable.FixedColumns( table );
        } );
')))