我想获得一个DataTable(包括其所有排名,搜索和页面功能),这些功能不会在整个页面中完全展开,并导致每列中出现大量空白区域...
...理想情况下,列宽类似于" wrap"来自renderTable
的样式......
我知道我可以修复相对列宽,但是,我的表将根据所选输入的不同数量的列动态更新。我希望其他列扩展到右侧的空白区域,然后如果它变得比浏览器窗口宽度宽,则会触发水平滚动条。
上图中表格的可重复示例......
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)
}
))
答案 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.frame
为df
,请将此代码放在服务器端的被动/ renderTable块的开头。它会将列名称包装到所需的长度,从而减小表的大小。您始终可以将宽度更改为等于所需的宽度。
library(stringr)
colnames(df) = str_wrap(colnames(df),width = 10)