Dan*_*iel 10 r knitr r-markdown
我正在使用knitr创建一个文档,我发现每次在开发过程中解析文档时从磁盘重新加载数据都很繁琐.我已将该数据文件子集化以进行开发以缩短加载时间.我也有knitr缓存设置为on.
我尝试使用<<-
和使用exists
with 将数据分配给全局环境where=globalenv()
,但这不起作用.
任何人都知道如何在knitr中使用来自环境的预加载数据或者有其他想法来加速开发?
编织文档时,会在R中创建新环境,因此全局环境中的任何设置都不会传递到文档.但是,这是故意完成的,因为在全局环境中意外引用对象很容易破坏可重现的分析,因此每次进行干净的会话意味着RMarkdown文件独立运行,而不管全局环境设置如何.
如果您确实有一个用于预加载数据的用例,那么您可以执行一些操作.
首先,我创建了一个名为"RenderTest.Rmd"的最小Rmd文件:
title: "Render"
author: "Michael Harper"
date: "7 November 2017"
output: pdf_document
---
```{r cars}
summary(cars2)
```
Run Code Online (Sandbox Code Playgroud)
在此示例中,cars2
是我从全局会话引用的一组数据.使用RStudio中的"Knit"命令运行它,这将返回以下错误:
摘要错误(汽车):未找到对象'cars2':... withCallignHandlers - > withVisible - > eval - > eval - > summary执行暂停
在render
从功能rmarkdown
可以从另一条R脚本调用.默认情况下,这不会为脚本运行创建新环境,因此您可以使用已加载的任何参数.举个例子:
# Build file
library(rmarkdown)
cars2<- cars
render("RenderTest.Rmd")
Run Code Online (Sandbox Code Playgroud)
但是,我会小心这样做.首先,使用RMarkdown的好处是它使脚本的可重复性非常容易.一旦开始使用外部脚本,它就会使复制变得更加复杂,因为所有设置都不包含在文件中.
如果您有一些需要时间运行的分析,您可以将分析结果保存为R对象,然后您可以将最终版本的数据重新加载到会话中.使用我上面的例子:
```{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
```
Run Code Online (Sandbox Code Playgroud)
我更喜欢这种技术.块dataProcess
被缓存,因此只有在对代码进行了更改时才会运行.结果将保存到文件中,然后由下一个块加载.数据仍然必须加载到会话中,但如果需要进行任何数据清理,则可以保存最终数据集.
随着过去几年对RStudio的更新,不再需要不断重建文件.可以直接在文件中运行块,并查看输出窗口.它可能会为您节省大量时间来优化脚本,只需节省几分钟的编译时间(通常情况下,这也是获得热饮的好时机!).
归档时间: |
|
查看次数: |
3015 次 |
最近记录: |