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

时间:2012-05-17 00:59:17

标签: r knitr

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

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

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

问题

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

评论

我看过第一行的this example。所以我想这是一种设置全局设置的方法,但我认为本地设置会覆盖全局设置。

`r opts_chunk$set(fig.width=5, fig.height=5, fig.path='')`

3 个答案:

答案 0 :(得分:33)

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

`r opts_chunk$set(cache=TRUE)`

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

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

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

答案 1 :(得分:16)

删除缓存选项

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

因此,在Linux上的Rstudio

  1. 转到菜单Tools - Shell,在包含降价文件的工作目录中打开控制台。
  2. 输入命令rm cache/*
  3. 基本工作流程

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

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

答案 2 :(得分:12)

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

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

```{r model.fitting.chunk1, cache = cachemodels}
blah blah
```

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

```{r libraries.etc, echo=FALSE, results='hide', message=FALSE}
cachedata = TRUE
cachemodels = TRUE
```

然后,您可以一次快速打开大量块的缓存。