我经常有一个主R Markdown文件或knitr LaTeX文件,其中source
还有一些其他R文件(例如,用于数据处理)。但是,我认为在某些情况下,使这些源文件成为其自己的可复制文档(例如,R Markdown文件不仅包含用于数据处理的命令,还会生成可解释数据处理的可复制文档,这将是有益的)。决定)。
因此,我想source('myfile.rmd')
在主R Markdown文件中有一个命令。这将提取并提取的R代码块内的所有R代码myfile.rmd
。当然,这会引起错误。
以下命令有效:
```{r message=FALSE, results='hide'}
knit('myfile.rmd', tangle=TRUE)
source('myfile.R')
```
results='hide'
如果需要输出,可以省略。即,从knitr输出的R代码myfile.rmd
成myfile.R
。
但是,它似乎并不完美:
source(...)
。因此,我的问题是: 是否有更优雅的方式来获取R Markdown文件的R代码?
看来您正在寻找单线。把这个放进你的.Rprofile
呢?
ksource <- function(x, ...) {
library(knitr)
source(purl(x, output = tempfile()), ...)
}
但是,我不明白为什么要source()
在Rmd文件本身中编写代码。我的意思是knit()
将运行该文档中的所有代码,并且如果您提取代码并将其分批运行,则在您knit()
编写本文档时,所有代码将运行两次(在您自己内部运行)。这两个任务应该分开。
如果您真的想运行所有代码,则RStudio使此操作相当容易:Ctrl + Shift + R
。它基本上调用purl()
和source()
幕后。
@Yihui,您好:我认为这很有用,因为有时您的分析可能会以小的脚本形式进行组织,但是在您的报告中,您希望拥有整个管道的代码。
因此,这里的用例是您要编写所有代码,并对其进行大量记录和解释,但是该代码由其他脚本运行。
@BrashEquilibrium这是使用
source()
或knitr::knit()
运行代码的问题。我知道人们对后者不太熟悉,但purl()
并不可靠。您已被警告:github.com/yihui/knitr/pull/812#issuecomment-53088636@Yihui您认为'source(purl(x,...))'的替代方案是什么?一个源可以如何多个* .Rmd-Files,而不会出现关于重复的块标签的错误?我不想回到原始文档并编写它。我将* .Rmd用于许多文件,而我可能必须将其导出并与他人讨论,因此,能够为分析的所有步骤提供多个Rmd-Files将是很棒的。