Как использовать `DT::renderDT()` как с аргументом `option`, так и с аргументом `formatCurrency()`

#r #shiny #dt

#r #блестящий #дт #dt

Вопрос:

У меня есть таблица, отображаемая в блестящем приложении с помощью DT::renderDT() вот так:

 DT::renderDT(tab %>% 
            selection = "none",
            extensions = 'Buttons',
            option = list(buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
                          dom = 'Brti')
          )
  

а затем я захотел также использовать formatCurrency() функцию:

 DT::renderDT(DT::datatable(tab) %>% 
              DT::formatCurrency(columns = 2:5, 
                                 currency = '',                                 
                                 mark = " ",
                                 digits = 0),
            selection = "none", 
            extensions = 'Buttons',
            option = list(buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
                          dom = 'Brti')
          )
  

и получите следующее предупреждение:
Warning in processWidget(instance) : renderDataTable ignores ... arguments when expr yields a datatable object; see ?renderDataTable
т. Е. я не могу предоставить как сам datatable() объект, так и renderDT() опции.

К сожалению, я не нашел способа использовать formatCurrency() функцию непосредственно внутри DT::renderDT() функции, кто-нибудь может сказать мне, как я должен это сделать?

Ответ №1:

В этом случае аргументы должны быть переданы в datatable вызове:

 library(shiny)
library(DT)
library(datasets)

tab <- iris

ui <- fluidPage(DT::DTOutput("myTable"))

server <- function(input, output, session) {
  output$myTable <- DT::renderDT({
    DT::datatable(
      tab,
      selection = "none",
      extensions = 'Buttons',
      option = list(
        buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
        dom = 'Brti'
      )
    ) %>%
      DT::formatCurrency(
        columns = 2:5,
        currency = '',
        mark = " ",
        digits = 0
      )
  })
}

shinyApp(ui, server)
  

Комментарии:

1. Здравствуйте и спасибо за ваш ответ. Из некоторых показаний я понял, что некоторые параметры доступны только внутри DT::renderDT() , а не DT::datatable() нет, но, возможно, это неверно? т. Е. Все ли опции, доступные для DT::renderDT() , могут быть предоставлены непосредственно DT::datatable() ?

2. Пожалуйста, смотрите ?renderDT аргументы «…»: ignored when expr returns a table widget, and passed as additional arguments to datatable() when expr returns a data object . — Соответственно, renderDT просто передает аргументы datatable в случае, если вы предоставляете данные, а не datatable объект (просто удобная функция renderDT ).