温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - How to source R Markdown file like `source('myfile.r')`?
knitr Markdown r

其他 - 如何获取R Markdown文件,例如`source('myfile.r')`?

发布于 2020-04-14 11:07:43

我经常有一个主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.rmdmyfile.R

但是,它似乎并不完美:

  • 它导致创建一个额外的文件
  • 如果需要控制显示,它需要出现在自己的代码块中。
  • 它不像简单那么优雅source(...)

因此,我的问题是否有更优雅的方式来获取R Markdown文件的R代码?

查看更多

提问者
Jeromy Anglim
被浏览
405
852 2015-08-19 22:17

看来您正在寻找单线。把这个放进你的.Rprofile呢?

ksource <- function(x, ...) {
  library(knitr)
  source(purl(x, output = tempfile()), ...)
}

但是,我不明白为什么要source()在Rmd文件本身中编写代码。我的意思是knit()将运行该文档中的所有代码,并且如果您提取代码并将其分批运行,则在您knit()编写本文档时,所有代码将运行两次(在您自己内部运行)。这两个任务应该分开。

如果您真的想运行所有代码,则RStudio使此操作相当容易:Ctrl + Shift + R它基本上调用purl()source()幕后。