【发布时间】:2018-05-26 19:50:21
【问题描述】:
在 Shiny-Server 上运行时,我遇到了 R Shiny DataTable 中的大表问题。渲染后,页面闪烁“尝试重新连接”,然后最终超时并失去连接。该行为在 Shiny-Server 上发布时发生,但在使用 shiny::runApp() 在本地启动时不会发生。
仅用 3 列结果对 500,000 条记录进行测试会产生问题。对于小桌子,它工作得很好。
我将问题隔离到 DT:: 包。如果我将shiny:: 用于dataTableOutput 和renderDataTable,它工作正常。但这错过了 DT 提供的所有有用功能。当问题发生时,DataTable 的过滤机制仍在服务器上工作和处理,但其他闪亮的功能将不起作用。
下面的代码可以重现错误:
library(shiny)
df <- data.frame(num = rep(c(1,2,3,4,5,6,7,8,9,0), times=50000),
letters = rep(letters[1:10], times=50000),
colA = rep(c("apple","orange","pear","grape","onion"), times=100000))
ui <- navbarPage("DataTable test", id="nav",
tabPanel("Define Subset",
# Present Datatable
fluidRow(DT::dataTableOutput("mdu_subset_table"), style = "font-size: 85%; width: 100%")
),
tags$head(
includeCSS("styles.css")
)
)
server <- function(input, output, session) {
# session$allowReconnect(TRUE)
output$mdu_subset_table <- DT::renderDataTable(
{df}
, filter="top"
, options = list(sDom = '<"top">lrt<"bottom">ip',
lengthMenu = c(100,1000)
)
)
}
shinyApp(ui, server)
Shiny Server 上的 R 版本为:R 版本 3.4.1 (2017-06-30) -- "Single Candle"
本地和闪亮服务器上安装的库是相同的。
闪亮服务器上的 R 控制台日志中没有出现错误:
su: ignore --preserve-environment, it's mutually exclusive to --login.
Listening on http://127.0.0.1:43761
~
~
~
~
~
【问题讨论】:
-
在不了解的情况下,我的第一个想法是在桌子上使用服务器端处理。阅读here,它可以像在您的渲染语句中添加
server = TRUE一样简单。但是,由于这表明存在网络延迟或相关问题,因此这可能会也可能不会真正解决您的问题。 -
感谢@KevinArseneau。服务器端处理默认启用,并在本示例中使用。尝试使用客户端处理将导致直接显示有关表太大的错误消息。
标签: r datatables shiny dt