3 votes

Affichage de grandes tables de données en Shiny

J'essaie d'afficher une table de données relativement grande dans une application brillante. Les dimensions de la table sont de 7000x30. Les performances dans Chrome étaient très très lentes, j'ai donc ajouté l'extension "Scroller" pour limiter le rendu, mais cela n'a pas aidé. Il semble que ce soit le grand nombre de colonnes qui soit à l'origine du problème, et non le grand nombre de lignes. J'ai également essayé d'utiliser l'extension colvis mais le bouton donne une liste non déroulante et avec 30 colonnes, cela ne fonctionnerait pas. J'ai également essayé de masquer certaines colonnes en utilisant l'option visible, mais cela n'a pas fonctionné.

Voici l'exemple :

data = as_tibble(matrix(runif(200000), ncol=30))
data %>%
  DT::datatable(filter = 'top', extensions = c('Buttons', 'Scroller'), 
                options = list(scrollY = 650,
                               scrollX = 500,
                               deferRender = TRUE,
                               scroller = TRUE,
                               # paging = TRUE,
                               # pageLength = 25,
                               buttons = list('excel',
                                              list(extend = 'colvis', targets = 0, visible = FALSE)),
                               dom = 'lBfrtip',
                               fixedColumns = TRUE), 
                rownames = FALSE)

Bizarrement, la visionneuse Rstudio affiche la table de données et fonctionne bien. Ce n'est que lorsque j'exécute le document comme un document brillant et que je l'ouvre dans Chrome qu'il devient très lent. Mes questions sont les suivantes :

  1. Pourquoi cela se produit-il ?
  2. Comment n'afficher qu'un nombre limité de colonnes par défaut et avoir la possibilité d'afficher les autres ?
  3. existe-t-il un meilleur bouton pour colvis ? si la liste des colonnes dépasse la longueur de la page, je ne peux pas accéder à ces colonnes cachées pour les activer ou les désactiver.

2voto

Kevin Points 445

Que voulez-vous dire par "léthargique" ?

Je l'ai testé et tout me semble correct en termes de vitesse.

library(shiny)
library(shinydashboard)
library(DT)

####/UI/####
header <- dashboardHeader()

sidebar <- dashboardSidebar()

body <- dashboardBody(
  DT::dataTableOutput("test")
)

ui <- dashboardPage(header, sidebar, body)

####/SERVER/####
server <- function(input, output, session) {

  data <- as_tibble(matrix(runif(200000), ncol=30))

  output$test <- DT::renderDataTable({

    DT::datatable(
      data,
      filter = 'top', extensions = c('Buttons', 'Scroller'),
      options = list(scrollY = 650,
                     scrollX = 500,
                     deferRender = TRUE,
                     scroller = TRUE,
                     # paging = TRUE,
                     # pageLength = 25,
                     buttons = list('excel',
                                    list(extend = 'colvis', targets = 0, visible = FALSE)),
                     dom = 'lBfrtip',
                     fixedColumns = TRUE), 
      rownames = FALSE)
  })  

}

shinyApp(ui, server)

Vous voudrez peut-être supprimer 'scroller' de Options = () comme avec autant de rangées, vous pourriez vouloir le diviser en pages. De plus, vous pouvez essayer de faire en sorte que la table soit traitée par le serveur en mettant Server = TRUE là-dedans, qui lui fera traiter chaque page par rapport à l'ensemble des données en une seule fois.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X