如何在交互式会话中读取 knitr/Rmd 缓存?

How to read knitr/Rmd cache in interactive session?

我有一个包含大量缓存代码块的 Rmd 文件。

现在我想继续使用交互式会话开发该脚本,在将最终代码放入文档的新块之前尝试并测试不同的解决方案。

使用普通的 R 脚本,我可以将其作为源代码使我的交互式会话与脚本的最后一行保持一致。 但是,这将导致(重新)执行交互式会话中的所有代码。

我想将我的 Rmd 文件读入交互式会话,忽略 Markdown 部分并利用现有的 knitr 缓存,最好不创建任何输出。

我该怎么做?

PS:我不是在寻找一些 IDE 特定的方法来设置它,而是寻找一个我可以从任何终端仿真器中的简单 R 会话中 运行 的命令.

认为 console/R 会话中的 运行 library("knitr"); knit("foo.Rmd") 是最简单的方法,尽管它会重写 foo.md、数字等。(busy/lazy 目前无法测试。)

您可能会在 cache 目录中四处翻找并直接读取缓存文件,但那样会更多 work/trickier.

我创建了将对象从缓存块加载到交互式 R 会话中的函数。这些功能是 lazyload_cache_dirlazyload_cache_labels 并且在 qwraps2 版本 > 0.2.4

中可用

使用这些函数的详细示例是 here:

快速概览:

假设您有文件 report.Rmd

---
title:  "A Report"
output: html_document
---

```{r first-chunk, cache = TRUE}
fit <- lm(mpg ~ wt + hp, data = mtcars)
x <- pi
```

```{r second-chunk, cache = TRUE}
fit <- lm(mpg ~ wt + hp + am, data = mtcars)
xx <- exp(1)
```

编织后你最终得到一个这个项目目录

.
├── report_cache
│   └── html
│       ├── first-chunk_bf368425c25f0c3d95cac85aff007ad1.RData
│       ├── first-chunk_bf368425c25f0c3d95cac85aff007ad1.rdb
│       ├── first-chunk_bf368425c25f0c3d95cac85aff007ad1.rdx
│       ├── __packages
│       ├── second-chunk_2c7d6b477306be1d4d4ed451f2f1b52a.RData
│       ├── second-chunk_2c7d6b477306be1d4d4ed451f2f1b52a.rdb
│       └── second-chunk_2c7d6b477306be1d4d4ed451f2f1b52a.rdx
├── report.html
└── report.Rmd

并且您想从 first-chunk.

加载对象
lazyload_cache_labels("first-chunk", path = "report_cache/html")
## Lazyloading report_cache/html/first-chunk_bf368425c25f0c3d95cac85aff007ad1
ls()
## [1] "fit" "x"

有关仅加载缓存对象的整个目录或从缓存块中加载特定对象的详细信息,请参阅 the blog post

在内部,knitr uses lazyLoad 加载缓存的结果,您也可以:

lazyLoad('knitr_cache_dir/chunk_2c7d6b477306be1d4d4ed451f2f1b52a')

确保提供不带后缀的文件名。