Esta es una pregunta de seguimiento a mi pregunta anterior que se puede encontrar aquí .
En este fragmento de código, calculo la suma de la columna de una tabla de datos brillante usando Javascript, ya que quiero que se muestre directamente debajo de la tabla de datos.
library(shiny) library(DT) ui <- shinyUI(fluidPage( h1("Testing TableTools"), mainPanel(dataTableOutput("display")) )) Names <- c("", names(mtcars)) FooterNames <- c(rep("", 5), Names[6], rep("", 6)) server <- function(input, output, session) { sketch <- htmltools::withTags(table( tableHeader(Names), tableFooter(FooterNames) )) opts <- list( footerCallback = JS( "function(tfoot, data, start, end, display) { var api = this.api(), data; var sum1 = api.column(5).data().reduce(function(a, b) { return a + b; }); sum1 = Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(sum1) $(api.column(5).footer()).html('SubTotal: ' + sum1) }" ) ) output$display <- DT::renderDataTable(container = sketch, extensions = "Buttons", options = opts, { mtcars }) } shinyApp(ui = ui, server = server)Sin embargo, ordenar la tabla cambiará la suma de la columna, ya que la suma es solo la suma de la columna que se muestra. Quiero cambiarlo para que muestre la suma total en el caso de varias "páginas" de la tabla y si solo hay una página, debería calcularla como lo hace ahora.
server = FALSE en renderDT y column(5, {search: 'applied'}) en JavaScript:
library(shiny) library(DT) ui <- shinyUI(fluidPage( h1("Testing TableTools"), mainPanel(DTOutput("display")) )) Names <- c("", names(mtcars)) FooterNames <- c(rep("", 5), Names[6], rep("", 6)) server <- function(input, output, session) { sketch <- htmltools::withTags(table( tableHeader(Names), tableFooter(FooterNames) )) opts <- list( footerCallback = JS( "function(tfoot, data, start, end, display){ var api = this.api(), data; var sum1 = api.column(5, {search: 'applied'}).data().reduce(function(a, b) { return a + b; }); sum1 = Intl.NumberFormat('de-DE', {style: 'currency', currency: 'EUR'}).format(sum1); $(api.column(5).footer()).html('SubTotal: ' + sum1); }" ) ) output$display <- renderDT({ datatable( mtcars, container = sketch, extensions = "Buttons", options = opts ) }, server = FALSE) } shinyApp(ui = ui, server = server)