【发布时间】:2021-08-18 22:52:43
【问题描述】:
我有下面的 Shiny 应用程序。我第一次选择任何给定的数字时,加载结果需要 3 秒。由于bindCache,如果我稍后选择相同的数字,我会立即得到结果。
但是,我不想手动选择所有 10 个数字,只是为了让我的应用在呈现之前做出响应。有没有办法提前缓存一组输入?在此示例中,我想缓存 input$num 值 1 到 10 的结果。在实际应用中,大约有 5 个输入,每个输入有 5 个可能的值,用于缓存 25 个可能的结果。
library(shiny)
ui <- fluidPage(
sliderInput('num', 'Pick a number:', min = 1, max = 10, value = 1),
textOutput('out')
)
server <- function(input, output, session) {
output$out <- reactive({
Sys.sleep(3)
paste("Your number is:", input$num)
}) %>% bindCache(input$num)
}
shinyApp(ui, server)
注意:
一种反应可能是我应该手动预先计算这些结果。在真正的应用程序中,大部分时间来自gt::render_gt 和gt::gt_output 我提前创建的gt 表。我相信这些函数只能在响应式上下文中使用(意味着只能在 Shiny 应用中使用?)
编辑:
作为旁注,我最初的问题是通过使用gt::as_raw_html 在闪亮应用程序之前的一步中呈现表格来解决的。仍然留下这个问题,因为它有时在其他情况下是一个问题。
【问题讨论】:
-
Joe Cheng 在 RStudio 会议 (2019) 中谈到了在 R Shiny 应用程序中缓存结果作为获得巨大性能提升的一种方式。所以这个谈话可能有你想要的。本次讲座视频为youtube.com/watch?v=Wy3TY0gOmJw&ab_channel=RStudio