En utilisant R Shiny, je souhaite afficher un tableau (par exemple via le package "DT") où chaque cellule contient une case à cocher. À côté de chaque en-tête de ligne et de colonne, je souhaite afficher une « Sélectionner tout »/« case à cocher principale » qui, une fois sélectionnée, sélectionnera toutes les cases à cocher de la ligne ou de la colonne correspondante. En tant que fonctionnalité supplémentaire, la case à cocher dans la cellule supérieure gauche sélectionnera toutes les cases du tableau. Un exemple :
J'ai trouvé ici un exemple de cette fonctionnalité où une colonne a une case à cocher principale (en utilisant du JavaScript) mais je n'arrive pas à comprendre comment l'étendre à mes besoins.
library(shiny) library(DT) ui <- fluidPage( # Sidebar panel sidebarPanel(), # Main panel with the table mainPanel( DTOutput("myTable") ) ) server <- function(input, output){ dat <- data.frame( vapply(1:6, function(i){ as.character( checkboxInput(paste0("col1-", i), label = NULL, width = "150px") ) }, character(1)), vapply(1:6, function(i){ as.character( checkboxInput(paste0("col2-", i), label = NULL, width = "150px") ) }, character(1)), vapply(1:6, function(i){ as.character( checkboxInput(paste0("col3-", i), label = NULL, width = "150px") ) }, character(1)) ) names(dat) <- c( as.character(checkboxInput("col1", label = "1", width = "150px")), as.character(checkboxInput("col2", label = "2", width = "150px")), as.character(checkboxInput("col3", label = "3", width = "150px")) ) row_names <- LETTERS[1:6] rownames(dat) <- row_names output$myTable <- renderDT({ datatable( dat, escape = FALSE, options = list( columnDefs = list( list(targets = c(1, 2, 3), orderable = FALSE, className = "dt-center") ) ), callback = JS( "$('#col1').on('click', function(){", " var cboxes = $('[id^=col1-]');", " var checked = $('#col1').is(':checked');", " cboxes.each(function(i, cbox) {", " $(cbox).prop('checked', checked);", " });", "});", "$('#col2').on('click', function(){", " var cboxes = $('[id^=col2-]');", " var checked = $('#col2').is(':checked');", " cboxes.each(function(i, cbox) {", " $(cbox).prop('checked', checked);", " });", "});", "$('#col3').on('click', function(){", " var cboxes = $('[id^=col3-]');", " var checked = $('#col3').is(':checked');", " cboxes.each(function(i, cbox) {", " $(cbox).prop('checked', checked);", " });", "});" ) ) }) } shinyApp(ui, server)
C'est un début, mais je n'arrive pas à comprendre comment placer la case à cocher principale à côté de la ligne, ni à trouver une case à cocher principale dans le coin supérieur gauche de toutes les cases. De plus, l'ensemble est un peu grand - ce serait bien s'il était plus compact.
Modifier : case à cocher "Sélectionner tout"