r - 避免每次在knitr中加载数据

标签 r knitr r-markdown

我正在使用knitr创建一个文档,我发现每次在开发过程中解析文档时从磁盘重新加载数据是很乏味的。我已经对该数据文件进行了子集化以进行开发,以缩短加载时间。我还将 knitr 缓存设置为打开。

我尝试使用 <<- 将数据分配给全局环境,并使用existswhere=globalenv() ,但这没有用。

有人知道如何在knitr中使用环境中预加载的数据或者有其他想法来加快开发速度吗?

最佳答案

当编织文档时,会在 R 中创建一个新环境,因此全局环境中的任何设置都不会传递到文档。然而,这是有意这样做的,因为意外引用全局环境中的对象很容易破坏可重现的分析,因此每次创建一个干净的 session 意味着 RMarkdown 文件会自行运行,无论全局环境设置如何。

如果您确实有一个用例证明预加载数据是合理的,那么您可以执行以下操作。

示例数据

首先,我创建了一个最小的 Rmd 文件,如下所示,名为“RenderTest.Rmd”:

title: "Render"
author: "Michael Harper"
date: "7 November 2017"
output: pdf_document
---

```{r cars}
summary(cars2)
```

在此示例中,cars2 是我从全局 session 中引用的一组数据。在 RStudio 中使用“Knit”命令运行它,这将返回以下错误:

Error in summary(cars): object 'cars2' not found: ... withCallignHandlers -> withVisible -> eval -> eval -> summary Execution halted

方案一:手动调用渲染函数

可以从另一个 R 脚本调用 rmarkdown 中的 render 函数。默认情况下,这不会为脚本的运行创建新的环境,因此您可以使用已加载的任何参数。举个例子:

# Build file
library(rmarkdown)

cars2<- cars
render("RenderTest.Rmd")

但是,我会小心这样做。首先,使用 RMarkdown 的好处是它使脚本的重现性变得非常容易。一旦开始使用外部脚本,复制就会变得更加复杂,因为所有设置都不包含在文件中。

选项 2:将数据保存到 R 对象

如果您有一些需要时间运行的分析,您可以将分析结果保存为 R 对象,然后可以将数据的最终版本重新加载到 session 中。使用我上面的例子:

```{r dataProcess, cache = TRUE}
cars2 <- cars
save(cars2, "carsData.RData") # saves the 'cars2' dataset
```
and then we can just reload the data into the session:

```{r}
load("carsData.RData") # reloads the 'cars2' dataset
```

我更喜欢这种技术。 block dataProcess 被缓存,因此仅在代码发生更改时才运行。结果保存到文件中,然后由下一个 block 加载。数据仍然需要加载到 session 中,但如果需要进行任何数据清理,您可以保存最终的数据集。

选项 3:降低构建文件的频率

随着过去几年对 RStudio 的更新,不断重建文件的需要减少了。可以直接在文件中运行 block ,并查看输出窗口。它可能会为您节省大量尝试优化脚本的时间,只是为了节省几分钟的编译时间(无论如何,这通常是喝杯热饮的好时机!)。

enter image description here

关于r - 避免每次在knitr中加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25962942/

相关文章:

html - 使用浏览器打开 .html(= .Rmd 输出)时,Leaflet Layer Tiles 不可切换

r - 评估变量,以便它可以出现在 R markdown 的代码块中

r - 如何使用Sparklyr包对不同数据类型的数据进行扁平化?

使用 tidyverse 删除给定特定条件的重复条目

r - 有没有一种简单的方法可以使用 Windows 10 在 R Markdown 上运行 bash 脚本?

r - Knit2html 不复制 R Studio 中 Knit HTML 按钮的功能

r - 使用 Vim + latex-suite + knitr

r - 如何增加R中pandoc的堆栈空间溢出?

r - 是否可以在 Shiny 的应用程序中使用操作按钮呈现 "runtime:shiny"rmarkdown (.rmd) 文件?

r - R如何看待日期向量?