在R Shiny DataTable中设置列宽不适用于大量列的情况

时间:2016-01-18 08:41:59

标签: r shiny

我需要在R Shiny应用程序中设置DataTabe的列宽。我浏览了文档中的Data Table Options。另外,我在Stackoverflow中查看了thisthis个问题。

如果DataTable没有太多列,则设置宽度可以正常工作。但是,如果存在多个列,则尽管存在绝对宽度单位(例如output$mytable <- DT::renderDataTable({ num_of_cols <- 3 cbind(iris,iris)[,1:num_of_cols]}, options = list(autoWidth = TRUE, columnDefs = list(list(width = '500px', targets = 1)))) ),但仍会覆盖设置。

在下面的代码段中:

num_of_cols = 3

如果我设置变量num_of_cols,它可以正常工作。但是,增加显示的列(autoWidth = FALSE)会导致列宽减小。如果显示大量列,则宽度设置似乎无效。

我尝试了选项drawCallback,但没有给出不同的结果。我也尝试在this线程的答案部分中描述的选项Plugin::load('VideoEmbed', ['autoload' => true]);中使用JavaScript,但它给出了相同的结果。

如何让DataTable显示所需的列宽设置?

2 个答案:

答案 0 :(得分:3)

根据建议here,设置scrollX=T并在选项中保留autoWidth = TRUE应该有效。

答案 1 :(得分:2)

哇。我无法相信这一点。表对象上的列宽应该是如此清晰,但对于数据表来说,它是如此令人困惑。我花了很多时间研究这个并且在最终发现RStudio中的工具提示显示答案之前干了。

DT::renderDataTable({
      datatable(df) %>% formatStyle(columns = c(1,2), width='200px')
})

修改

这可能有用,但实际上并没有比任何其他方式更好。我可以告诉你,没有直接的方法可以做到这一点。这是我现在使用的代码......我不认为我需要使用其他任何东西。我不得不逐列构建它并不断返回并调整以使其工作。似乎应该修复的东西。

我将UI宽度值设置为1200px以启动并在完成后将其缩放。

#UI
DT::dataTableOutput(outputId = "tableID", width = '830px')
#Server
options = list(autoWidth = TRUE,
              columnDefs = list(list(targets=c(0), visible=TRUE, width='90'),
                                list(targets=c(1), visible=TRUE, width='145'),
                                list(targets=c(2), visible=TRUE, width='105'),
                                list(targets=c(3), visible=TRUE, width='100'),
                                list(targets=c(4), visible=TRUE, width='100'),
                                list(targets=c(5), visible=TRUE, width='100'),
                                list(targets=c(6), visible=TRUE, width='100'),
                                list(targets=c(7), visible=TRUE, width='90'),
                                list(targets='_all', visible=FALSE)