没有拉伸的闪亮应用程序的renderDataTable中的列宽

时间:2014-12-19 15:27:10

标签: r datatables shiny

我想获得一个DataTable(包括其所有排名,搜索和页面功能),这些功能不会在整个页面中完全展开,并导致每列中出现大量空白区域...

enter image description here

...理想情况下,列宽类似于" wrap"来自renderTable的样式......

enter image description here

我知道我可以修复相对列宽,但是,我的表将根据所选输入的不同数量的列动态更新。我希望其他列扩展到右侧的空白区域,然后如果它变得比浏览器窗口宽度宽,则会触发水平滚动条。

上图中表格的可重复示例......

library(shiny)
runApp(list(
  ui = navbarPage(
  title = 'Tables',
  tabPanel('dataTableOutput', dataTableOutput('ex1')),
  tabPanel('tableOutput', tableOutput('ex2'))
),
server = function(input, output) {
  output$ex1 <- renderDataTable(iris)
  output$ex2 <- renderTable(iris)
}
))

2 个答案:

答案 0 :(得分:8)

我认为你应该在dataTables中使用drawCallback。在这里,我只是将您的示例稍微更改为将dataTable的宽度修复为600px。你可以在回调函数中使用可能的java脚本函数来做任何事情。

library(shiny)
runApp(list(
  ui = navbarPage(
    title = 'Tables',
    tabPanel('dataTableOutput', dataTableOutput('ex1')),
    tabPanel('tableOutput', tableOutput('ex2'))
  ),
  server = function(input, output) {
    output$ex1 <- renderDataTable( iris, 
                                   option = list( drawCallback = I("function( settings ) {document.getElementById('ex1').style.width = '600px';}")) )
    output$ex2 <- renderTable(iris)
  }
))

答案 1 :(得分:0)

假设您的data.framedf,请将此代码放在服务器端的被动/ renderTable块的开头。它会将列名称包装到所需的长度,从而减小表的大小。您始终可以将宽度更改为等于所需的宽度。

library(stringr)

colnames(df) = str_wrap(colnames(df),width = 10)