R большой дисплей в Shiny - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь отобразить относительно большой DataTable в блестящем приложении. Размеры стола 7000х30. Производительность в Chrome была очень медленной sh, поэтому я добавил расширение 'Scroller', чтобы ограничить рендеринг, но это не помогло. Кажется, что причиной является большое количество столбцов, а не большое количество строк. Я также попытался использовать расширение colvis, но кнопка дает список без прокрутки и с 30 столбцами, которые не будут работать. Также я попытался скрыть некоторые столбцы с помощью опции visible, но это не сработало.

Вот пример:

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)

Как ни странно, программа просмотра Rstudio показывает данные и в порядке. Только когда я запускаю документ как блестящий документ и открываю его в Chrome, он становится очень медленным sh. Мои вопросы:

  1. Почему это происходит
  2. Как по умолчанию показывать только ограниченное количество столбцов и иметь возможность показать остальные
  3. есть лучшая кнопка для colvis? если список столбцов превышает длину страницы, я не могу получить доступ к этим скрытым столбцам, чтобы включить или отключить их.

1 Ответ

0 голосов
/ 10 января 2020

Что вы подразумеваете под sluggi sh?

Я запустил его, и все выглядит нормально для меня с точки зрения скорости.

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)

Вы можете удалить 'scroller' начиная с Options = (), как и с таким количеством строк, вы можете разбить его на страницы. Кроме того, вы можете попытаться выполнить обработку табличного сервера, добавив туда Server = TRUE, что позволит обрабатывать каждую страницу по сравнению с целым набором данных одновременно.

...