2017-06-29 102 views
3

我有几个使用#'进行记录的R脚本,目的是将所有脚本合并到一个单独的.Rmd文件中。在单个降价文件中将多个R脚本渲染为降价

我从this post看到它真的直截了当地多主.Rmd文件中结合使用代码块.Rmd文件

这是不错,但我更愿意把我的代码.R文件,因为它运行的速度更快意目的和文档的渲染不会经常发生。

首先,我在主降价文件,尝试这样:

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

但是,这并不能正确渲染 - bascally一堆与#'的现在降价的文字。

然后我试图使用什么在这个blog post描述是为了将R脚本在一个单一的降价文件合并:

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

但这只是产生script.md并没有嵌入降价到主文件。关于如何在主文件中正确渲染.R脚本作为降价的任何想法?

回答

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") 
``` 
+0

感谢您的答案 - 这适用于我,但它似乎使我的减价图停止显示。具体使用'grViz()'函数和'diagrammeR'包创建的图表 – Warner

+0

这是一个有点不相关的问题。但是,我遇到的一个问题是,添加其他脚本时出现此错误:退出行NA-87(script2.spin.Rmd) 错误parse_block(g [-1],g [1],params.src): 重复标签'unnamed-chunk-1'' – Warner

+0

@Warner看起来第二个问题是由标签冲突引起的,因此解决方案是标记代码块,就像在我编辑的答案中一样。 – Consistency