在 R 中使用 scrollX 时设置列宽

问题描述

我正在尝试更改 DT::datatable 中某些列的宽度,不幸的是,仅当数据中的列数较少时,才使用 columnDefs 选项才有效。

当我将所有列添加到我的数据中时,列宽不再遵循我在 columnDefs 选项中的设置。

这是一个例子,你可以看到第一个表格的宽度都是恒定的,而在第二个表格中,我已经能够根据需要手动设置宽度。删除 scrollX 参数也不起作用,考虑到我的数据的列数,我需要它。


library(MASS)
library(shiny)
library(DT)

ui <- fluidPage(
    mainPanel(
      DT::dataTableOutput("table1"),br(),DT::dataTableOutput("table2")
    )
  )

server <- function(input,output) {

  output$table1 <- DT::renderDataTable({
    DT::datatable(
      Cars93[,-(20:27)],rownames = FALSE,options = list(
        pageLength = 5,autowidth = TRUE,scrollX = TRUE,searching = TRUE,ordering = TRUE,paging = TRUE,columnDefs = list(list(width = "200px",targets = c(0:2)),list(width = "20px",targets = 3),list(width = "50px",targets = 4))
      )
    )
  })
    output$table2 <- DT::renderDataTable({
      DT::datatable(
        Cars93[,-(6:27)],options = list(
          pageLength = 5,targets = 4))
        )
      )
  })
  
}

shinyApp(ui,server)

我需要在我的代码中更改什么才能在第一个表中设置列宽,就像在第二个表中一样,同时拥有所有列和 scrollX?

谢谢

解决方法

试试:

ui <- fluidPage(
  tags$head(
    tags$style(
      HTML("table {table-layout: fixed;}")
    )
  ),......

并将 autowidth 替换为 autoWidth