繁体   English   中英

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

[英]knitr: run all chunks in an Rmarkdown document

我有一个.rmd文件,该文件的编织过程很好。

我想运行文档中的所有块,以便可以在R Shell中浏览结果。

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

有没有办法做到这一点?

使用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)

但是您将需要将其转换为功能。 这很容易,除了必须使用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")

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

因此,如果您的文件是my.Rmd ,则只需运行

library(knitr)
knit('my.Rmd')

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

stop('here')

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

opts_chunk $ set(错误=假)

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

以原始文本变量加载文件

file_name="your_file_name.Rmd"
txt <- readLines(file_name)

标识开始和结束块(第一列将是每个块的块开始的行,第二列将是块的结束行)

chunks <- matrix(grep("```",txt),ncol =  2,byrow = T)

选择开始和结束块之间的所有行,它们都是实际的代码作为字符串

temp <- apply(chunks,1,function(x) txt[(x[1]+1):(x[2]-1)])

执行代码。(此行执行所有包含在字符串变量中的代码)

eval(parse(text = temp)) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM