msc*_*lli 14 r knitr r-markdown
我有一个Rmd包含大量缓存代码块的文件.
现在,我想继续使用交互式会话开发该脚本,以便在将最终代码放入文档的新块之前进行游戏并测试不同的解决方案.
使用普通R脚本,我可以直接使用它来使我的交互式会话与脚本的最后一行相同.但是,这将导致(重新)执行交互式会话中的所有代码.
我想将我的Rmd文件读入一个交互式会话,忽略Markdown部分并利用现有的knitr缓存,理想情况下不创建任何输出.
我怎样才能做到这一点?
PS:我不是在寻找一些特定于IDE的方法来设置它,但是我可以在任何终端模拟器中从一个简单的R会话中运行命令.
Pet*_*ter 11
我创建的函数将对象从缓存的块加载到交互式R会话中.该功能是lazyload_cache_dir和lazyload_cache_labels和可qwraps2版> 0.2.4
快速概述:
说你有文件 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)
```
Run Code Online (Sandbox Code Playgroud)
编织后,你最终得到一个这个项目目录
.
??? 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
Run Code Online (Sandbox Code Playgroud)
并且您想要从中加载对象first-chunk.
lazyload_cache_labels("first-chunk", path = "report_cache/html")
## Lazyloading report_cache/html/first-chunk_bf368425c25f0c3d95cac85aff007ad1
ls()
## [1] "fit" "x"
Run Code Online (Sandbox Code Playgroud)
有关仅加载缓存对象的整个目录或从缓存块中加载特定对象的详细信息,请参阅博客文章.
我认为library("knitr"); knit("foo.Rmd")在控制台/ R会话中运行是最简单的方法,虽然它会重写foo.md,数字等等.(太忙/懒于测试它.)
您可能可以在cache目录中查找并直接读取缓存的文件,但这将是更多的工作/更棘手.
在内部,knitr用于lazyLoad加载缓存的结果,因此您可以:
lazyLoad('knitr_cache_dir/chunk_2c7d6b477306be1d4d4ed451f2f1b52a')
Run Code Online (Sandbox Code Playgroud)
确保提供不带后缀的文件名。