24

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

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

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

问题

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

评论

我已经看到了第一行所在的这个例子。所以我想这是一种设置全局设置的方式,但我认为本地设置会覆盖全局设置。

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

3 回答 3

35

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

`r opts_chunk$set(cache=TRUE)`

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

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

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

于 2012-05-17T01:13:59.543 回答
20

删除缓存选项

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

因此,在 Linux 上的 Rstudio

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

基本工作流程

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

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

一旦您已经创建了文档就太晚了,但是对于未来的文档,您可能需要考虑使用参数由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
```

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

于 2013-03-12T12:18:36.980 回答