在Shiny内部,我正在渲染数据表。
我正在阅读DT软件包的选项,发现要做到这一点,我需要了解Javascript。
https://rstudio.github.io/DT/options.html
m = as.data.frame(matrix(round(rnorm(100, 1e5, 1e6)), 20))
datatable(m, options = list(
rowCallback = JS(
"function(row, data) {",
"var num = '$' + data[3].toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');",
"$('td:eq(3)', row).html(num);",
"}")
), callback = JS("table.order([3, 'asc']).draw();"))
Run Code Online (Sandbox Code Playgroud)
我对JS不太了解,所以我问这个问题。我目前最大的数字是:22381,最低的是0。
我想显示:22381作为22,381。如果可能的话:22381,S / .22,381。
这就是我的DataTable现在呈现的方式,我正在使用这些选项来对收入进行排序(降序)。
output$products <- renderDataTable(products_ss(),
options = list(
order = list(list(2, 'desc'))
))
Run Code Online (Sandbox Code Playgroud)
更新1:如何申请formatCurrency?
像这样应用它会产生错误:
您指定了列:itemRevenue,但是数据的列名是
output$productos_sams <- renderDataTable(productos_samsung() %>%
formatCurrency(c('itemRevenue'), currency = ' S/.',
interval = 3, mark = ',', before = FALSE),
options = list(
order = list(list(2, 'desc'))
))
Run Code Online (Sandbox Code Playgroud)
我已更改您的答案以匹配我的列名。
你在找 DT::formatCurrency
library(DT)
datatable(m) %>%
formatCurrency(c('V1', 'V2', 'V3', 'V4', 'V5'), currency = ' S/.',
interval = 3, mark = ',', before = FALSE)
Run Code Online (Sandbox Code Playgroud)
library(shiny)
library(DT)
#Use DT::dataTableOutput and DT::renderDataTable as shiny also has these functions name
shinyApp(
ui = fluidPage(fluidRow(column(12, DT::dataTableOutput('tbl')))),
server = function(input, output) {
m <- reactive({m <- as.data.frame(matrix(round(rnorm(100, 1e5, 1e6)), 20))})
output$tbl = DT::renderDataTable(
datatable(m()) %>% formatCurrency(c('V1', 'V2', 'V3', 'V4', 'V5'), currency = ' S/.',
interval = 3, mark = ',', before = FALSE)
)
}
)
Run Code Online (Sandbox Code Playgroud)
就像https://rstudio.github.io/DT/shiny.html 中一样DT :: renderDT()的第一个参数可以是数据对象,也可以是datatable()返回的表小部件。当您想在使用Shiny呈现窗口小部件之前对其进行操作时,后一种形式可能很有用,例如,您可以将格式化功能应用于表格窗口小部件:。因此,您需要datatable(m())先将其传递到另一步骤。
| 归档时间: |
|
| 查看次数: |
1404 次 |
| 最近记录: |