如何为knitr markdown文档设置cache = FALSE并覆盖代码块设置?

Jer*_*lim 21 r knitr

我知道我可以使用cache=TRUE选项来使用R Markdown来缓存R代码块knitr.例如,它可能看起来像这样:

```{r longanalysis, cache=TRUE}
for (i in 1:5000) {
    lm((i+1)~i)
}
```
Run Code Online (Sandbox Code Playgroud)

我意识到,如果我想禁用该分析的缓存,我可以cache=FALSE在代码块中更改选项.但是,如果我有许多启用了缓存的R代码块,则需要仔细查找和替换操作.

  • 有没有办法暂时设置cache=FALSE整个R Markdown文档?

评论

我见过第一行的例子.所以我想这是一种设置全局设置的方法,但我认为本地设置会覆盖全局设置.

`r opts_chunk$set(fig.width=5, fig.height=5, fig.path='')`
Run Code Online (Sandbox Code Playgroud)

Das*_*son 34

似乎默认设置为FALSE,本地块选项覆盖全局选项,但您可以做的一件事是将全局选项设置为默认缓存,方法是将其添加到文档顶部

`r opts_chunk$set(cache=TRUE)`
Run Code Online (Sandbox Code Playgroud)

然后,对于您不希望缓存的部分,您将显式将这些部分设置为cache = FALSE.

然后,如果要将整个文档设置为不缓存任何内容,可以将全局选项更改为FALSE并重新运行它.

问题是,如果任何块选项设置为cache = TRUE,那么这些选项将覆盖全局设置,如果将global选项设置为FALSE,则不会重新运行.所以我认为实现你想要的唯一方法是将默认值更改为cache = TRUE,显式设置你不希望缓存的块有缓存= FALSE,然后你可以将全局选项切换为FALSE来做什么你想要什么时候发生.

  • 谢谢您的帮助.但是,我想我刚解决了自己的问题.我坚持认为它必须是一个设置.但实际上所需要的只是删除缓存文件夹的内容. (3认同)

Jer*_*lim 17

删除缓存选项

knitr创建一个目录来存储缓存的对象.默认情况下会调用它cache.要确保无论代码块cache设置如何都运行所有分析,只需删除缓存目录的内容即可.

因此,在Linux上的Rstudio中

  1. 转到菜单Tools - Shell以在包含markdown文件的工作目录中打开控制台.
  2. 输入命令 rm cache/*

基本工作流程

这是我目前的基本工作流程

  • 如果编织很快(例如,少于10秒),请不要缓存.
  • 如果编织需要一段时间(例如,超过10秒),请添加`r opts_chunk$set(cache=TRUE)`到R Markdown文件.
  • 如果缓存导致问题并且编织相对较快(例如,在几分钟内),则删除整个缓存.
  • 如果缓存导致问题并且编织需要很长时间(例如,几分钟或几小时),请命名R代码块并使用dependsonknitr中选项.命名还允许选择性删除缓存目录中的命名R代码块.


Cor*_*one 13

一旦您已经创建了文档,就太迟了,但是对于将来的文档,您可能需要考虑使用参数进行评估的事实knitr.这意味着您可以拥有以下内容:

```{r data.loading.chunk1, cache = cachedata}
blah blah
```
blah blah

```{r model.fitting.chunk1, cache = cachemodels}
blah blah
```
Run Code Online (Sandbox Code Playgroud)

然后在文档的顶部我有类似的东西:

```{r libraries.etc, echo=FALSE, results='hide', message=FALSE}
cachedata = TRUE
cachemodels = TRUE
```
Run Code Online (Sandbox Code Playgroud)

然后,它允许您一次快速打开大量块的缓存.