在单个降价文件

时间:2017-06-29 17:50:00

标签: r knitr r-markdown

我有几个R脚本使用#'进行记录,目的是将所有脚本合并到一个.Rmd文件中。

我从this post看到,使用主.Rmd文件中的代码块组合多个.Rmd文件真的很直接

这很好,但我更喜欢将我的代码保留为.R文件,因为它的运行速度更快,并且文档的呈现不会经常发生。

首先我在主降价文件中尝试了这个:

```{r, child = "script.R"}
```

但这并没有正确呈现 - 基本上是一堆带有#'的降价文字。

然后我尝试使用此blog post中描述的内容,以便将R脚本合并到一个降价文件中:

```{r}
library(rmarkdown)
rmarkdown::render("script.R")
```

但这只会生成script.md并且不会将markdown嵌入到主文件中。有关如何在主文件中正确呈现.R脚本作为降价的任何想法?

1 个答案:

答案 0 :(得分:2)

这是我的方法。它将使用rmarkdown::render生成md文件,然后通过将results选项设置为asis来读取md文件的内容并将其合并到主文件中。缺点是该方法生成一些临时文件,它可能不是非常高效,但它实现了目标。

---
title: "test"
author: "Consistency"
date: "2017/6/29"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)

join <- function(ls, sep = ", "){
    do.call(paste, append(ls, list(sep = sep)))
}

inline_render <- function(script_name){
    suppressMessages(capture.output(rmarkdown::render(paste0(script_name, ".R"), output_format = "rmarkdown::md_document"), file = "tmp"))
    cat(join(readLines(paste0(script_name, ".md")), "\n"))

}
```

```{r script, echo=FALSE, results='asis'}
inline_render("script")
```

```{r script1, echo=FALSE, results='asis'}
inline_render("script1")
```