我经常有一个主要的 R Markdown 文件或 knit LaTeX 文件,我在其中源
一些其他 R 文件(例如,用于数据处理)。然而,我认为在某些情况下,让这些源文件成为它们自己的可重现文档(例如,R Markdown 文件不仅包含数据处理命令,而且还生成解释数据处理决策的可重现文档)是有益的)。
因此,我希望在我的主 R Markdown 文件中包含一个类似 source('myfile.rmd')
的命令。这将提取并获取 myfile.rmd
的 R 代码块内的所有 R 代码。当然,这会产生错误。
以下命令有效:
```{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()
将运行本文档中的所有代码,如果您提取代码并以 block 的形式运行它,则当您 knit()< 时,所有代码将运行两次
这个文件(你自己在里面运行)。这两个任务应该是分开的。
如果您确实想运行所有代码,RStudio 已经使这变得相当简单:Ctrl + Shift + R
。它基本上在幕后调用 purl()
和 source()
。
关于r - 如何获取 R Markdown 文件,例如 `source(' myfile.r')`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10966109/