如何使用 DT 包中的 renderDataTable() 格式化数据表的列?

Posted

技术标签:

【中文标题】如何使用 DT 包中的 renderDataTable() 格式化数据表的列?【英文标题】:How do I format columns of a datatable using renderDataTable() in the DT package? 【发布时间】:2016-12-17 05:59:52 【问题描述】:

我可以像这样格式化数据表对象的一列

library(DT)
datatable(data.frame(Amount=c(1.00, 2.20, 4.15))) %>% formatCurrency(columns='Amount')

但是我怎样才能使用renderDataTable() 做到这一点?

library(shiny)
library(DT)

ui <- shinyUI(fluidPage(
  DT::dataTableOutput('dtoMyTable')
))

server <- shinyServer(function(input, output)
  output$dtoMyTable <- DT::renderDataTable(
    data.frame(Amount=c(1.00, 2.20, 4.15))
  )
)

shinyApp(ui = ui, server = server)

【问题讨论】:

Section 4.5 @brittenb 注意最后一句“由于用户在数据列中格式化数字很常见,我们在这个包中提供了一些简单的辅助函数(例如 formatCurrency())来完成这些任务以一种更简单的方式,因此您不必自己编写 javascript 代码。”但没有给出这方面的例子。 renderDataTable 采用 DT::datatable 对象,或者可以强制转换为 DT::datatable 对象的对象。因此,您只需将data.frame 调用与DT::datatable() 包装在server 一侧,然后将其通过管道传输到formatCurrency 啊,谢谢@brittenb 【参考方案1】:

阅读DT::renderDataTable上的帮助页面:

renderDataTable(expr, ...

表达式 用于创建表格小部件的表达式(通常通过 datatable()),或要传递给 datatable() 以创建表格小部件的数据对象

所以你只需先创建datatable 对象,根据需要设置格式,然后调用renderDataTable

server <- shinyServer(function(input, output)
  dt <- datatable(data.frame(Amount=c(1.00, 2.20, 4.15))) %>% 
    formatCurrency(columns='Amount')
  output$dtoMyTable <- DT::renderDataTable(dt)
)

【讨论】:

它可以工作,但会产生警告:Warning in widgetFunc() : renderDataTable ignores ... arguments when expr yields a datatable object; see ?renderDataTable @Konrad 这正是它的意思。您应该将所有额外参数放在datatable() 调用中而不是外部。喜欢DT::renderDataTable(datatable(dt, options = list(dom = 't', ordering = FALSE), rownames = FALSE)

以上是关于如何使用 DT 包中的 renderDataTable() 格式化数据表的列?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 DT_R8 存储在 SSIS 中的变量中

R闪亮包中的父/子行

删除数据表中的“显示条目”

使用带有data.table的滚动功能

如何在 R 包中正确使用其他包中的函数

如何使用 R Shiny 中的 DT 包格式化数据表输入?