如何使用 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() 格式化数据表的列?的主要内容,如果未能解决你的问题,请参考以下文章