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

时间:2015-07-03 07:24:49

标签: r knitr r-markdown

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

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

使用简单的R脚本,我可以直接使用它来使我的交互式会话与脚本的最后一行相同。 但是,这将导致(重新)执行交互式会话中的所有代码。

我想将我的Rmd文件读入一个忽略Markdown部分的交互式会话。利用现有的knitr缓存,理想情况下不会创建任何输出。

我该怎么做?

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

3 个答案:

答案 0 :(得分:10)

我创建的函数将对象从缓存的块加载到交互式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

答案 1 :(得分:6)

认为在控制台/ R会话中运行library("knitr"); knit("foo.Rmd")是最简单的方法,尽管它会重写foo.md,数字等。(太忙/懒,暂时测试它。)

您可能可以在cache目录中查找并直接读取缓存的文件,但这样做会更加困难。

答案 2 :(得分:5)

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

lazyLoad('knitr_cache_dir/chunk_2c7d6b477306be1d4d4ed451f2f1b52a')

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