在Shiny的DataTable实现中控制数字格式

Ste*_*cke 11 r datatables shiny jquery-datatables

目标

默认情况下,使用闪亮的DataTable中的数千个分隔符渲染大数字.

问题

文档读(对我来说)应该已经显示了千位分隔符.我是否遇到了兼容性问题,或者我是否需要在代码中添加更多内容,如果是,那又怎么样?

[更新]还有另一个SO问题,试图解决闪亮的预格式化数据的排序.问题尚未解决,但建议另一条路线 - 事先格式化.这是一条可取的路线,如果是这样,如何正确解决其他OP的排序问题?

背景

我试图改善闪亮表的输出,以提高可读性.我已成功使用另一个SO问题来冻结标题,但我正在努力使数字格式正确.

MWE

library(shiny)
runApp(
  list(ui = fluidPage(
    tagList(
      singleton(tags$head(tags$script(src='//cdn.datatables.net/fixedheader/2.1.2/js/dataTables.fixedHeader.min.js',type='text/javascript'))),
      singleton(tags$head(tags$link(href='//cdn.datatables.net/fixedheader/2.1.2/css/dataTables.fixedHeader.css',rel='stylesheet',type='text/css')))
    ), 

    dataTableOutput("mytable")
  )
  , server = function(input, output, session){
    output$mytable <- renderDataTable(iris*1000,
                                      options = list(
                                        pageLength = 50,
                                        language.thousands=",",
                                        initComplete = I("function(settings, json){
                                          new $.fn.dataTable.FixedHeader(this, {
                                            left:   true
                                          } );
                                        }")
                                      )
    )
  })
)
Run Code Online (Sandbox Code Playgroud)

显示示例

文档

看看DataTable文档,它看起来就像设置语言一样.数千就足够了:

DataTables的内置数字格式化程序(formatNumberDT)用于格式化表信息中使用的大数字.

language.thousands

默认情况下,DataTables将使用language.thousandsDT中指定的字符(反过来,默认情况下是逗号)作为千位分隔符.

formatNumber

在formatNumber中它有一个可以添加的函数,但是,这对我来说是一个新的,所以我不确定在现有代码的上下文中如何使用这个函数.

$('#example').dataTable( {
  "formatNumber": function ( toFormat ) {
    return toFormat.toString().replace(
      /\B(?=(\d{3})+(?!\d))/g, "'"
    );
  };
} );
Run Code Online (Sandbox Code Playgroud)

浏览器细节

Chrome:版本39.0.2171.71 m

Dan*_*Dan 11

我知道这是一个相当古老的帖子,但今天也在努力解决这个问题,以为其他人可能会从这个解决方案中获得价值.

自从提出问题后,该DT软件包就被RStudio(GithubCRAN)发布了.乍一看,如何格式化数字并不太明显,因为它们不是formatNumber像它们那样的相应函数formatCurrency.解决它的方法是使用formatCurrency并只将currency参数设置为空.以下示例.

library(shiny)
library(DT)
runApp(
  list(ui = fluidPage(
    DT::dataTableOutput("mytable")
  ),
  server = function(input, output, session) {
    output$mytable <- DT::renderDataTable(
      DT::datatable(iris*1000, 
                    options = list(pageLength = 50, 
                                   columnDefs = list(list(className = 'dt-left', 
                                                          targets = 0:4)))) %>% 
        formatCurrency(1:4, '')
    )
  }
  )
)
Run Code Online (Sandbox Code Playgroud)


JPL*_*JPL 6

与问题formatprettyNum是,这些功能产生的字符,而不是NUMERICS这一事实.因此,无法为渲染表设置样式.此示例可能是以下解决方案:

  output$tab <- renderDataTable({ 
  datatable(mytable) %>%
      formatCurrency(columns = ..., currency = "", interval = 3, mark = ",") %>%
      formatStyle(
      columns = ...,
      color = styleInterval(myThreshold, c("black", "red"))) }) 
Run Code Online (Sandbox Code Playgroud)