我正在尝试在数据表的页脚中添加一个colsum
我使用https://github.com/rstudio/DT/issues/39
为1列做了这个sketch <- htmltools::withTags(table(
tableHeader(cars),
tableFooter(cars)
))
datatable(cars,container = sketch, rownames = F,
options = list(
footerCallback = JS(
"function( tfoot, data, start, end, display ) {",
"var api = this.api();",
"$( api.column(1).footer() ).html(",
"api.column(1 ).data().reduce( function ( a, b ) {",
"return a + b;",
"} )", # remove ; here
");",
"}")
)
)
我正在尝试为它做 - 所有栏目 - 所有num列(或除char id之外的所有列都更容易)
编辑:解决方案:)
dt_test <- structure(list(`pathologie principale` = c("Effet toxique des métaux",
"Autres résultats anormaux des examens chimiques du sang", "Néphrite tubulo-interstitielle chronique",
"Atteintes tubulo-interstitielles et tubulaires dues à des médicaments et des métaux lourds",
"Autres maladies pulmonaires obstructives chroniques", "Autres résultats anormaux de l'examen des urines"
), Fort = c(12L, 4L, 3L, 2L, 2L, 2L), Moyen = c(2L, 0L, 0L, 0L, 1L, 1L), Faible = c(4L, 0L, 0L, 0L, 4L, 0L)),
.Names = c("pathologie principale", "Fort", "Moyen", "Faible"), class = c("data.table", "data.frame"
), row.names = c(NA, -6L))
sketch <- htmltools::withTags(table(
tableHeader(dt_test),
tableFooter(sapply(dt_test, function(x) ifelse( (is.numeric(x)) ,sum(x) ,"total" ))
)))
datatable(dt_test,
container = sketch,
rownames = F
)
答案 0 :(得分:4)
不需要footerCallback
:
sketch <- htmltools::withTags(table(
tableHeader(dt_test),
tableFooter(sapply(dt_test, function(x) if(is.numeric(x)) sum(x)))
))
datatable(dt_test,
container = sketch,
rownames = F
)
答案 1 :(得分:2)
编辑:GGamba的答案更简单,应该使用,我仍然希望保持正确的JS代码与footerCallback一起使用,以便分别处理每一列以供将来参考。
将调用插入一个for循环,从0(或任何你想要的列)结束:
opts <- list(
footerCallback = JS(
"function( tfoot, data, start, end, display ) {",
"var api = this.api();",
sprintf("for(var i=1; i<%d; i++) {",ncol(dt_test)),
" $( api.column(i).footer() ).html(",
" api.column(i ).data().reduce( function ( a, b ) {",
" if(isNaN(a)) return ''; return a+b;",
" } )", # remove ; here
" );",
"}}"))
datatable(dt_test, container = sketch, options = opts)
请注意,第一列是字符串,因此reduce连接字符串。另请注意,您可以对开始和结束之间的任何数字执行此操作。