2017-06-29 1 views
3

J'ai plusieurs scripts R qui sont documentés en utilisant #' dans le but de combiner tous les scripts dans un seul fichier .Rmd.Rendu de plusieurs scripts R comme démarques dans un fichier de démarquage unique

je vis de this post que c'est vraiment en avant droit de combiner plusieurs .Rmd fichiers en utilisant des morceaux de code dans le fichier maître .Rmd

C'est agréable, mais je préfère garder mon code comme .R fichiers, car il est plus rapide pour son but but et le rendu de la documentation ne se produira pas aussi souvent.

D'abord, j'ai essayé ceci dans le fichier principal de démarquage:

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

Mais cela n'a pas rendu correctement - bascally un tas de texte Markdown présent du #'.

Alors je tenté d'utiliser ce qui est décrit dans ce blog post afin de combiner les scripts R dans un seul fichier démarquage:

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

Mais ce produit juste script.md et ne pas incorporer le démarquage dans le fichier principal. Des réflexions sur la façon de rendre correctement les scripts .R comme démarques dans le fichier principal?

Répondre

2

Ceci est ma démarche. Il utilisera rmarkdown::render pour générer le fichier md, puis lire le contenu du fichier md et l'incorporer dans le fichier principal en définissant l'option results sur asis. L'inconvénient est que la méthode génère des fichiers temporaires, et elle peut ne pas être très performante mais elle atteint l'objectif.

--- 
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

Merci pour la réponse - cela fonctionne pour moi mais il semble faire des diagrammes dans mon arrêt de démarquage affichage. Spécifiquement les diagrammes créés en utilisant la fonction 'grViz()' et le paquet 'diagramR' – Warner

+0

C'est un problème relativement sans rapport. Mais un problème que je rencontre est quand ajouter d'autres scripts est cette erreur 'Quitter des lignes NA-87 (script2.spin.Rmd) Erreur dans parse_block (g [-1], g [1], params.src): étiquette en double 'unnamed-chunk-1'' – Warner

+0

@Warner Il semble que le second problème soit causé par un conflit d'étiquette, donc une solution consiste à étiqueter le bloc de code, comme dans ma réponse éditée. – Consistency