Я хочу реализовать formatCurrency()
и formatPercentage()
(оба из пакета DT) для нескольких столбцов одновременно в блестящей панели инструментов. Я использую блестящий материал для данного примера.
В настоящее время я делаю следующее:
# The packages to load.
required_packages <- c("shiny", "shinymaterial", "DT", "tidyverse")
# This function will load in all the packages needed.
lapply(required_packages, require, character.only = TRUE)
# A table example.
ui <- material_page(
title = "Example table",
tags$h1("Table example"),
material_card(
title = "Table",
material_row(
DT::dataTableOutput("data_table_example")
),
depth = 1
)
)
server <- function(input, output) {
data_table_example_data = tibble(
Person = paste0("Person ", c(1:100)),
`Price $` = rnorm(100, 50000, 500),
`Cost $` = rnorm(100, 30000, 300),
`Probability %` = rnorm(100, 0.6, 0.1),
`Win %` = rnorm(100, 0.5, 0.2)
)
# This will create an output summary table
output$data_table_example = renderDataTable({
result = datatable(data_table_example_data, options = list(pageLength = 100, scrollX = TRUE),
class = 'cell-border stripe compact', rownames = FALSE) %>%
formatCurrency("Price $") %>%
formatCurrency("Cost $") %>%
formatPercentage("Probability %", digits = 1) %>%
formatPercentage("Win %", digits = 1)
})
}
shinyApp(ui = ui, server = server)
Однако в функции renderDataTable()
я хочу упростить функции форматирования до меньшего числа строк. Например, введите formatCurrency()
в любом столбце с "$" и formatPercentage()
в любом столбце с "%".
Я довольно долго искал подходящее решение, но не смог найти решение, но, полагаю, я просто упускаю довольно простое решение.
Что-то вроде:
# This will create an output summary table
output$data_table_example = renderDataTable({
result = datatable(data_table_example_data, options = list(pageLength = 100, scrollX = TRUE),
class = 'cell-border stripe compact', rownames = FALSE) %>%
formatCurrency(grepl("$", colnames()) %>%
formatPercentage(grepl("%", colnames()), digits = 1)
})
Несколько дополнительных очков:
- Тибл на самом деле будет реактивным
- Этот пример - очень тривиальная версия довольно сложной таблицы и набора реактивов
- Я не хочу реализовывать форматирование в реактивной части, так как я обнаружил, что это портит функцию сортировки DT, поскольку предполагается, что столбец является символьной строкой
Любая помощь будет принята с благодарностью