R- rmarkDown中的高速缓存实际上是什么?依恋错误



我刚刚开始测试rmarkDown用于创建数据集的代码书,我对使用cache = TRUE时的行为感到困惑。我正在使用Rstudio 1.1.463进行运行。rmarkDown_1.11,knitr_1.21和tidyverse_1.2.1。

使用以下示例代码,其中包括一些我感兴趣的文档和块选项,附加了我通常使用的所有库(请注意,我在几个地方添加了"在几个地方进行适当的格式化,:

---
title: "Test"
date: 2019-03-11
output: 
  html_document
---
  
  
```{r header, echo= FALSE, include=FALSE, cache = TRUE, warning= FALSE}
attach(mtcars)
library(sf)
library(tidyverse)
library(knitr)
library(summarytools)
opts_chunk$set(echo = FALSE, error = TRUE)
|```
# mtcars dataset heading
## map of car purchases
## cyl variable
```{r} 
kable(descr(cyl))
|```

首次按RSTUDIO上的针织按钮(没有现有的高速缓存文件夹)时,结果是预期的。如果我再次达到针织,则会发生以下情况:

  • 找不到cyl
  • kabledescr两个都无法找到函数'错误

如果父套件/数据范围被明确调用,则这些问题消失了。如果cache = FALSE没有问题。

为什么cache = TRUE会触发此行为?对于此代码簿,我考虑了附加最终数据集,然后为每个变量提供一些摘要。我还想生成几个带有许多变量的sf地图。我想在这样的标头块中处理所有内容,然后在整个文档中调用各种位。我应该有不同的想法吗?

顺便说一句,我不太明白为什么有必要在rmarkDown文档上明确library(knitr),因为我认为这是"编织"文档的关键软件包...如果我删除它,则找不到opts_chunk。<<<<<<<<<<

感谢您的任何帮助!

我相信cache = TRUE试图缓存块中创建的R对象。您的第一个块不仅仅是创建对象:attachrequire调用每个都有副作用:修改搜索列表,加载软件包等。这些副作用并没有缓存,但是您的文档需要工作:由于knitr认为没有理由再次运行块您的文档在第二次运行中失败。

当块进行较长的慢速计算以生成数据集以供以后绘制或汇总时,通常使用cache = TRUE,因为随后的运行可以跳过计算的慢部分。

您问为什么需要require(knitr)。严格来说,不需要:您可以使用knitr::opts_chunk。但更重要的是,想法是R Markdown文档是独立r会话的描述。是的,您需要knitr对其进行处理,但是它应该给出相同的结果,就像您在空的会话中单独运行代码一样。(这不是完全正确的:knitr的块选项和挂钩可以修改行为,但这是正在发生的事情的方便心理模型。)

库不耗时。我通常会在两个不同的块中从数据中拉开库和设置,最后一个 cache=TRUE

最新更新