我有一个.rmd文件,编织过程就好了。
我想在文档中运行所有块,以便我可以探索 导致我的R shell。
在Rstudio中,有一个选项可以运行文档中的所有块, 但是我找不到在简单的R会话中实现相同效果的方法(在我的终端中打开)。
有办法做到这一点吗?
答案 0 :(得分: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)
但是你想把它变成一个函数。这很容易,除非您必须使用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")
答案 1 :(得分:3)
您甚至不必使用purl()
:如果您在R控制台中knit
文档,则会在全局环境中评估代码(默认情况下,请参阅envir=
knit()
)的选项。
因此,如果您的文件是my.Rmd
,那么只需运行
library(knitr)
knit('my.Rmd')
一个方便的技巧:如果您只想运行文档中的某个点,请插入如下错误:
stop('here')
在您希望它停止的代码块中,并设置以下knitr
选项:
opts_chunk $集(误差= FALSE)
在运行knit()
之前在控制台中。
答案 2 :(得分:0)
将文件加载为原始文本变量
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))