Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
458 views
in Technique[技术] by (71.8m points)

r - How to read knitr/Rmd cache in interactive session?

I have an Rmd file with a lot of cached code chunks.

Now I want to keep developing that script using an interactive session to play around and test different solutions before putting the final code in a new chunk of the document.

With a plain R script, I could just source it to get my interactive session on par with the last line of the script. However, this would result in (re-)executing all code within the interactive session.

I want to read my Rmd file into an interactive session ignoring the Markdown part & making use of the existing knitr cache, ideally without creating any output.

How can I do this?

PS: I am not looking for some IDE-specific way to set this up but for a command that I can run from a simple R session in any terminal emulator.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I've created functions load the objects from cached chunks into an interactive R session. The functions are lazyload_cache_dir and lazyload_cache_labels and are available in qwraps2 version > 0.2.4

A detailed example of the use of these functions is here:

Quick overview:

Say you have the file 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)
```

After knitting you end up with a this project directory

.
├── 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

and you want to load the objects from first-chunk.

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

See the blog post for details on loading only a whole directory of cached objects or loading specific objects from within a cached chunk.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...