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

Posted

技术标签:

【中文标题】没有拉伸的闪亮应用程序的 renderDataTable 中的列宽【英文标题】:Column widths in renderDataTable of a shiny app without stretching 【发布时间】:2015-02-18 13:33:55 【问题描述】:

我想获得一个不能完全延伸到整个页面并导致每列中有大量空白的 DataTable(及其所有排名、搜索和页面功能)...

...理想情况下,列宽类似于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)

))

【问题讨论】:

我知道它不能直接解决您的问题,但 RStudio 刚刚宣布了用于 R 的 htmlwidgets,其中包括其他很酷的东西,DataTables。 htmlwidgets.org/showcase_datatables.html 【参考方案1】:

我认为您应该在 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)
  
))

【讨论】:

【参考方案2】:

假设您的data.framedf,然后将此代码放在服务器端reactive/renderTable 块的开头。它会将列名包装成所需的长度,从而减小表的大小。您可以随时将宽度更改为所需的宽度。

library(stringr)

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

【讨论】:

以上是关于没有拉伸的闪亮应用程序的 renderDataTable 中的列宽的主要内容,如果未能解决你的问题,请参考以下文章

为啥闪亮的动态 UI + 模块没有提供所需的输出?

没有img(src())的闪亮应用程序中的本地图像?

如何从闪亮写入 bigquery 表?

闪亮的:如何在闪亮的应用程序中添加反应栏

r闪亮:按下按钮时eventReactive没有反应

闪亮应用程序中的 RMarkdown