在Shiny中将Total/Subtotal添加到DataTable的底部

Bah*_*mid 12 r datatables shiny

我希望能够在下面创建的数据框的底部添加一个Total/Subtotal,显示为DataTable.我希望在应用的每个DataTable过滤器时更新Total/Subtotal.假设用户过滤前10条记录,我希望总数计算前10条记录的总和,或者如果用户过滤20条记录,我希望总数反映20条记录的总和,依此类推.

通过将新行绑定到现有数据帧以执行所需的计算,我想到了一种在R中实现此目的的方法.但我想知道是否有一种通过DataTables选项实现这一目标的简单方法.与使用" 页脚回调"功能的此示例类似的内容.

此外,请点击此处此处以提供类似问题的帮助.

 #Load required packages

require(shiny)

#Create a dataframe
df <- data.frame(random=1:25)

server <- function(input,output,session){

    #Display df using DataTable and apply desired options
    output$display <- renderDataTable({df})
}

ui <- shinyUI(fluidPage(

    #Add a title
    h1('Testing TableTools'),

        mainPanel(
           #Display results
           dataTableOutput('display')
                 )      


))

shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

Por*_*hop 3

以下是如何对给定页面进行小计的示例。为了得到总数,你可以预先计算它,然后也许paste它进入 JS 输出?

library(shiny)
library(DT)

ui <- shinyUI(fluidPage(
  h1('Testing TableTools'),
  mainPanel(
    dataTableOutput('display')
  )      
))

Names <- c("",names(mtcars))
FooterNames <- c(rep("",4),Names[5:6],rep("",6))

server <- function(input, output, session) {

  sketch <- htmltools::withTags(table(
    tableHeader(Names),tableFooter(FooterNames)
  ))

  opts <- list(
    dom = 'Bfrtip', buttons = list('colvis','print',list(extend='collection',text='Download',buttons = list('copy','csv','excel','pdf'))),
               footerCallback = JS(
                 "function( tfoot, data, start, end, display ) {",
                 "var api = this.api(), data;",
                 "$( api.column(5).footer()).html('SubTotal:  '+",
                 "api.column(5).data().reduce( function ( a, b ) {",
                 "return a + b;",
                 "} )",
                 ");",
                 "$( api.column(4).footer()).html('SubTotal: '+",
                 "api.column(4).data().reduce( function ( a, b ) {",
                 "return a + b;",
                 "} )",
                 ");","}")
  )

  output$display <- DT::renderDataTable(container = sketch,extensions = 'Buttons',options = opts,{
    mtcars
  })
}

shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述