2017-06-29 98 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