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

9
我可以像这样格式化datatable对象的列:

我可以对datatable对象的一列进行格式化,如下所示

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)

1
第4.5节 - tblznbits
请注意最后一句话:“由于用户通常会在数据列中格式化数字,因此我们在这个包中提供了一些简单的辅助函数(例如formatCurrency()),以更轻松的方式完成这些任务,因此您不必自己编写JavaScript代码。”但是没有给出示例。 - Ben
2
renderDataTable接受一个DT :: datatable对象或可以强制转换为DT :: datatable对象的对象。 所以你只需要在服务器端内使用DT :: datatable()将你的data.frame调用包装起来,然后将其传递到formatCurrency中即可。 - tblznbits
啊,谢谢 @brittenb - Ben
1个回答

6

请查看DT::renderDataTable的帮助页面:

renderDataTable(expr, ...

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
@Konrad 这意味着确切的意思。您应该将所有额外的参数放在 datatable() 调用内部而不是外部。像这样 DT::renderDataTable({datatable(dt, options = list(dom = 't', ordering = FALSE), rownames = FALSE)} - dracodoc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接