在后台加载闪亮的 tabPanel

Posted

技术标签:

【中文标题】在后台加载闪亮的 tabPanel【英文标题】:Load shiny tabPanel in background 【发布时间】:2018-01-24 15:17:48 【问题描述】:

我闪亮的ui.R 中有几个tabPanel() 块,它们都需要一些时间来加载。但是,它们似乎都被视为单独的页面,并且只有在从导航栏中选择 tabPanel() 后才开始呈现。

有没有办法在后台加载初始选项卡后预加载这些页面?

我尝试在我的服务器函数底部包含以下内容:

sapply(names(outputOptions(output)),function(x) outputOptions(output, x, suspendWhenHidden = FALSE))

这适用于存在于观察者或反应性上下文之外的输出变量,但不适用于内部的变量。

对维克多的回应

我尽量避免将renderPlot 放在observer 调用中,但我有一个通过文件轮询调用设置的reactiveVariable data.frame,然后需要对其进行子集和转换。

该转换用于一系列情节。将 reactiveValue 放在 observer 子集中一次在结构上更容易,然后让所有结果图都使用该非反应子集。

  Data = reactivePoll(5479,
               session,
               checkFunc = function() 
                 if (file.exists(orderStatsPath))
                   file.info(orderStatsPath)$mtime[1]
                 else
                   ""
               ,
               valueFunc = function() getData(orderStatsPath)
  )

  observe(

    Data = Data()
    Data = subset(Data, subset = Date >= Sys.Date() - 14)
    Data$Date = as.character(Data$Date)
    output$slippageRootTotalUSD = shiny::renderTable(
      result = dcast(Data,
                     Date ~ Symbol,
                     value.var = "slippageRootTotalUSD",
                     na.rm = T,
                     fun = sum,
                     margins = c("Date","Symbol"))

      rownames(result) = result[,1]
      result = signif(result[,-1],5)
      result
    ,
    rownames = TRUE,
    hover = TRUE,
    digits = 2,
    spacing = 's'
    )

    output$SizeUSD = shiny::renderTable(
      
        result = dcast(Data,
                       Date ~ Symbol,
                       value.var = "SizeUSD",
                       na.rm = T,
                       fun = sum,
                       margins = c("Date","Symbol"))

        rownames(result) = result[,1]
        result = round(result[,-1],0)

        result
      ,
      rownames = TRUE,
      hover = TRUE,
      digits = 0,
      spacing = 's'
    )
    sapply(names(outputOptions(output)),function(x) outputOptions(output, x, suspendWhenHidden = FALSE))
 

【问题讨论】:

【参考方案1】:

看看?outputOptions,你可能想要使用它:

# Disable suspend for output$myplot
outputOptions(output, "myplot", suspendWhenHidden = FALSE)

【讨论】:

即使在 output$plot 被分配到 observe 函数内部时,您是否希望它能够工作? 尝试在分配了output$plot 的同一观察者中调用outputOptions。一般来说,不建议在观察者中分配输出,你不能这样做吗?你能举个例子吗? 您还需要知道,如果未提供高度和宽度,则在非活动选项卡中使用renderPlot 创建的输出上设置suspendWhenHidden = FALSE 不起作用。 嗯,我注意到这种行为有点零星。隐藏选项卡图是否针对用户分辨率正确缩放,或者它们是否在左侧完全压缩加载,这似乎是随机的。

以上是关于在后台加载闪亮的 tabPanel的主要内容,如果未能解决你的问题,请参考以下文章

如何在闪亮中创建加载事件或默认事件?

闪亮的服务器不会加载应用程序

闪亮的应用程序未加载图形

在容器外加载数据时,dockerized 闪亮的应用程序不起作用

如何让 dockerize 闪亮的应用程序从本地驱动器加载数据(在主机上)

闪亮的仪表板 - 显示一个专用的“正在加载..”页面,直到数据的初始加载完成