luc*_*one 17 r rstudio knitr r-markdown
我有一个.rmd文件,编织过程就好了.
我想在文档中运行所有块,以便我可以在我的R shell中探索结果.
在Rstudio中有一个选项来运行文档中的所有块,但我找不到在简单的R会话中实现相同效果的方法(在我的终端中打开).
有没有办法做到这一点?
And*_*rie 17
使用Run all chunks相当于:
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)
您甚至不必使用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()。