如何使用renderDT强制科学记数法

时间:2018-04-03 15:54:17

标签: r datatables shiny dt

我希望1 1 12456 1 2 78910 1 3 34568 1 4 68942 表中数值的行为与使用时DT输出中的数值相同:

print

enter image description here

但无论选项如何,似乎DT都不关心它: enter image description here

我知道options(scipen = -1) options(digits = 3) cars/1000000 与呈现表格不同,但应该有办法实现。我可以使用printsignif来限制数字但我丢失的信息值非常低,这会对高值产生不同的影响。

  • 我想将值保存为数字,以便可以正确排序列。
  • 如果只有3位数值,则应保持经典值,如果更多,则应保持科学。

这是最小的例子。

round

任何线索?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用rowCallback使用toExponential javascript函数将符号更改为科学。

以下是一个例子:

library(shiny)
library(DT)
library(dplyr)

# Define UI for application that draws a histogram
ui <- fluidPage(
  # Application title
  titlePanel("Old Faithful Geyser Data"),
  # Sidebar with a slider input for number of bins 
  sidebarLayout(
    sidebarPanel(
    ),
    # Show a plot of the generated distribution
    mainPanel(
      DTOutput("dt")
    )
  )
)

# Define server logic required to draw a histogram
server <- function(input, output) {
  output$dt <- renderDT({
    datatable(cars/10,options = list(
      rowCallback = JS(
        "function(row, data) {",
        "for (i = 1; i < data.length; i++) {",
        "if (data[i]>1000 | data[i]<1){",
        "$('td:eq('+i+')', row).html(data[i].toExponential(1));",
        "}",
        "}",
        "}")
    )
    )
  })
}
# Run the application 
shinyApp(ui = ui, server = server)

答案 1 :(得分:1)

DT软件包还具有formatSignif()功能,例如:

output$tbl <- renderDataTable({
    DT::datatable(dat) %>%
        formatSignif(columns = c('speed', 'dist'), digits = 3)
})