knitr:在Rmarkdown文档中运行所有块

luc*_*one 17 r rstudio knitr r-markdown

我有一个.rmd文件,编织过程就好了.

我想在文档中运行所有块,以便我可以在我的R shell中探索结果.

在Rstudio中有一个选项来运行文档中的所有块,但我找不到在简单的R会话中实现相同效果的方法(在我的终端中打开).

有没有办法做到这一点?

And*_*rie 17

使用Run all chunks相当于:

  • 创建一个临时R文件
  • 用于knitr::purl将所有R块提取到临时文件中
  • 使用source()运行该文件
  • 删除临时文件

像这样:

tempR <- tempfile(fileext = ".R")
library(knitr)
purl("SO-tag-package-dependencies.Rmd", output=tempR)
source(tempR)
unlink(tempR)
Run Code Online (Sandbox Code Playgroud)

但是你会想把它变成一个函数.这很容易,除非您必须使用sys.source在全局环境中运行R脚本:

runAllChunks <- function(rmd, envir=globalenv()){
  tempR <- tempfile(tmpdir = ".", fileext = ".R")
  on.exit(unlink(tempR))
  knitr::purl(rmd, output=tempR)
  sys.source(tempR, envir=envir)
}

runAllChunks("SO-tag-package-dependencies.Rmd")
Run Code Online (Sandbox Code Playgroud)


pet*_*arp 8

您甚至不必使用purl():如果您knit在 R 控制台中查看文档,则代码将在全局环境中评估(默认情况下,请参阅envir=的选项knit())。

所以,如果你的文件是my.Rmd,那么只需运行

library(knitr)
knit('my.Rmd')
Run Code Online (Sandbox Code Playgroud)

一个方便的技巧:如果您只想运行到文档中的某个点,请插入如下错误:

stop('here')
Run Code Online (Sandbox Code Playgroud)

在代码块中您希望其停止的位置,并设置以下knitr选项:

opts_chunk$set(错误=FALSE)

在运行之前在控制台中knit()