【问题标题】:R Shiny app progress Indicator for loading data用于加载数据的 R Shiny 应用进度指示器
【发布时间】:2016-05-19 21:12:33
【问题描述】:

Shiny 是我们内部的 BI 工具。对于我们的 Shiny 应用,我们在 shinyServer 运行之前加载数据:

load("afterProcessedData.RData")
# or dt = fread("afterProcessedData.csv")

shinyServer(function(input, output, session){ ...

但是,有些应用正在加载大文件,加载时间长达 30 秒。很多用户在打开一个页面的时候,不知道页面是不是坏了,因为加载的时候卡住了。他们可能会关闭它或单击过滤器,这可能会导致错误。在这种情况下,进度条将非常有帮助。我注意到withProgress() 可能会有所帮助,但它必须在reactive()renderXx() 内部。

我可以做的一种方法是在shinyServer(function(input, output, session){ 中使用reactive() 扭曲laod(),但我担心它会降低性能。而且我的用户非常关心响应性能。

对这种情况有什么建议吗?

编辑:我想没有一个简单的方法可以做到这一点。我有另一个想法。也许我可以在屏幕上显示一个文本说“数据正在加载”,但我必须在第一个表出现后让它消失。但是,我不知道如何设置条件。下面是我显示第一个表的代码:

dashboardBody(
fluidRow( 
  tabBox(width = 12,
         tabPanel("Summary",
                  dataTableOutput("data1")),

提前谢谢你!

【问题讨论】:

  • 很好奇,为什么withProgress()reactive ()render() 中有问题? .尽管如此,我对它显示的那种状态栏并不满意,但是当我将withProgress 包装在我所有的render() 函数中时,它对我来说还可以。
  • 另外,如何使用SO solutions 中显示的示例包装您的数据加载函数,然后在 Shiny withProgress() 上显示 render
  • 这对我有用。 output$Ref_output <- DT::renderDataTable(withProgress( message = 'Processing the query', value = 5, expr = { DT::datatable(reference.table(), selection = 'multiple') 对 CSS 文件进行一些更改后,进度条比默认进度条更粗且呈红色。
  • @user5249203 感谢您的回答。我担心在reactive() 中有load() 会降低性能,因为每次更改都会调用load()。使用SO solutions 的第二个解决方案不知何故使load() 的时间延长了3 倍,这将受到客户的指责。
  • 如果这个负载在一个全局变量中,那么为什么每次会话都要load?对于其他一切,您可以并且应该使用 withProgress() 也禁用按钮,而人们等待 shinyjs 包,所以他们在完全加载之前不会点击任何东西

标签: r shiny shinydashboard


【解决方案1】:

尽管我仍然想知道如何为load() 添加进程栏,但我已经实现了替代解决方案,这对现在来说很好。它在页面上有一个文字说“数据正在加载...”,并且在第一个表格出现后它会消失。

#server.R   firstData is a reactive function to get the data for 1st table
  output$firstTable = reactive({
return(is.null(firstData()))
})
#ui.R
      conditionalPanel(
    condition = "output.firstTable",
    box(width = 12,
           h1("The data is loading...")
        )
  )

【讨论】:

  • 新方面。您可以保存每个对象并单独阅读它们,而不是加载完整的.rdata。它高效且快速。检查readRDS。现在,有一种简单的方法可以在 Rshiny 中实现 spinner 或类似的方法。 DT::dataTableOutput(outputId = 'table')%>% withSpinner()
【解决方案2】:

要引用来自 @user5249203 的有趣注释,withSpinner() 看起来是此功能的有用选项,并且是 shinycssloaders 包的一部分。我自己没用过,但它绝对是一个有趣的包,恰好在 CRAN 上并且有一些很好的例子:https://andrewsali.shinyapps.io/example/

【讨论】:

    猜你喜欢
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 2019-12-04
    相关资源
    最近更新 更多