闪亮的数据表:使用按钮扩展保存完整的数据框

10
我在使用带有Shiny的DataTables。使用按钮扩展,用户可以下载或打印数据表中的数据。但是只有可见部分的行被下载或打印出来了。我想更改这种行为,以便可以下载包含所有行的完整数据框架。这是否可能通过按钮扩展实现,还是我需要切换到downloadHandler?

我正在使用带有Shiny的DataTables。使用按钮扩展,用户可以下载或打印数据表中的数据。但是只有可见部分的行被下载或打印出来了。我想更改这种行为,以便可以下载包含所有行的完整数据框架。这是否可能通过按钮扩展实现,还是我需要切换到downloadHandler?

library(DT)
library(shiny)

df <- data.frame(a = 1:100, b = 1:100)

ui <- fluidPage(
  dataTableOutput("table")
)

server <- function(input, output){

  output$table <- DT::renderDataTable(df, 
                      extensions = c("Buttons"), 
                      options = list(dom = 'Bfrtip',
                                     buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
                      ))

}

shinyApp(ui, server)
1个回答

5
如果您使用Scroller,它会起作用:
  output$table <- DT::renderDataTable(df, 
                                      extensions = c('Buttons', 'Scroller'), 
                                      options = list(
                                        dom = 'Bfrtip',
                                        deferRender = TRUE,
                                        scrollY = 400,
                                        scroller = TRUE,
                                        buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
                                      ))  

编辑

正如 @Jav 评论的那样,当你有大量数据集时,这种解决方案不起作用。@Jav 指出,使用 server=FALSE 可能是更好的解决方法,它允许你使用分页或滚动模式:

output$table <- DT::renderDataTable(df, server = FALSE,
                  extensions = c("Buttons"), 
                  options = list(dom = 'Bfrtip',
                                 buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
                  ))

如果您有一个非常大的数据集,不想一开始完全加载它,那么您应该实现Shiny的下载处理程序。


2
实际上,这不是正确的。除非你设置server = FALSE,否则它仍然只会下载在用户端加载的部分。当然,在小数据集中,它超过了“可见行”,因此你可能感觉正在下载所有内容。但在大表格中,你会看到它只下载了一部分。 - Jav
  1. 你可以通过滚动整个表格,然后使用其中一个按钮来加载整个表格。但是在大型表格中非常愚蠢。
  2. 使用 server = FALSE
  3. 使用闪亮的下载处理程序。
- Jav
如果您使用 server=FALSE,当数据量较大时,连接可能会断开。 - li zheng
你可以提供一个页面长度选项,允许用户显示所有数据,而不是使用滚动条。 options = list(dom = 'Bfrtip', buttons = c('pageLength', 'copy', 'csv', 'excel', 'pdf', 'print'), pagelength = 10, lengthMenu = list(c(10, 25, 100, -1), c('10', '25', '100','All')) - fry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接