r - 从 shiny_prerenderd 到静态运行时的 rmarkdown 缓存管理
问题描述
描述
我想允许用户下载一个(相当)精确版本的shiny_prerendered
站点的副本。即,每个用户都应该能够个性化其自己的(动态)报告版本,并将其保存在 HTML 中。
我的主要问题是data
块的缓存管理(计算需要几分钟)。
我试图复制静态渲染文件夹中的所有内容(包括缓存),但{rmarkdown}
每次都重新创建一个新的数据缓存。奇怪的是,即使对于报告的多个连续请求,它也会重新创建缓存。此外,这仅在静态渲染发生时发生,即重新运行整个站点正确使用缓存(显然:-))!
重现步骤
在 RStudio 中,创建一个项目(例如rendercache/rendercache.Rproj
),其中包含一个名为的文件夹report/
,其中包含以下test-cache.Rmd
文件。
然后运行它,然后单击按钮下载报告。可以看到文件夹中的缓存report/test-cache_test/html
和里面的缓存report/static/test-cache_test/html
是不一样的。此外,如果您尝试第二次下载报告(在同一会话中!),第二个文件夹(static/
那些)中的缓存会再次更改。最后一件事对我来说毫无意义,因为报告应该以完全相同的方式复制两次!
---
params:
export: FALSE
runtime: shiny_prerendered
---
```{r setup, include=FALSE}
library(magrittr)
```
```{r data, include=FALSE, cache=TRUE}
my_bigdata <- mtcars
```
```{r download, eval=!params$export}
shiny::downloadLink("report", "Generate report")
```
```{r render, context="server", eval=!params$export}
output$report <- shiny::downloadHandler("test-cache.html",
function(file) {
static_dir <- "static"
dir <- fs::dir_create(static_dir)
list.files(all.files = TRUE, include.dirs = TRUE) %>%
setdiff(c(".", "..", static_dir)) %>%
file.copy(dir, recursive = TRUE, copy.date = TRUE)
report <- fs::path(dir, "test-cache.Rmd")
rmarkdown::render(report, "html_document", file,
params = list(export = TRUE),
runtime = "static",
envir = new.env(parent = globalenv())
)
}
)
```
参考
主要问题
.Rmd
有没有办法在使用“静态”运行时重新渲染 Shiny 预渲染维护/重用其数据缓存的整个副本(可能已修改) ?
解决方案
推荐阅读
- reactjs - 如何在 React 中显示特定项目 onClick?
- java - JavaFX——在一个场景中创建多个窗格
- django - Django django.core.exceptions.FieldError:无法解析关键字
- r - For循环用R中的NA替换某些标记的数据
- flutter - 以编程方式更改 DropdownButtonFormField 值
- android - 如何使用 MediaBrowser、MediaController、MediaSession 和 Exoplayer 获取均衡器的缓冲区和声音信息?
- html - 打开 Facebook 直播时出错。在其他帐户上工作
- python - 列表推导得到错误的输出
- python - 扩散一个长方体
- r - 在 R 中使用 & 快速组合逻辑矩阵