Rmarkdown et imbrication de fichiers

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Véronique Darmendrail
Messages : 37
Enregistré le : 27 Fév 2020, 10:49

Rmarkdown et imbrication de fichiers

Messagepar Véronique Darmendrail » 28 Mar 2022, 07:30

Bonjour à tous

Je cherche à profiter de la possibilité de faire appel à un fichier Rmarkdown dans d’autres fichiers Rmarkdown.
J'y arrive s'ils sont bien en poupées russes mais pas si c'est un fichier d'un dossier frère. Je m'explique.
J'ai un projet .Rproj dans le dossier A et le dossier A contient au même niveau des dossiers B1,B2 et C1, C2, C3. Chaque dossier C1, C2, C3 contient un fichier RmarKdown.
Dans mes dossiers B1 avec synthese1.Rmd et B2 avec synthese2.Rmd je fais des synthèses différentes qui utilisent les fichiers de mes dossiers C1, C2 et C3.
Si je mets directement mon synthese1.Rmd à la racine de A tout va bien, mais si je le mets dans B1 je n'y arrive pas. Or j'aimerais éviter de mélanger dans mon dossier A les fichiers synthese1.Rmd et synthese2.Rmd pour ne pas mélanger les rendus.
Est-ce possible ?

(Je contourne le problème dans les fichiers des doublons de chunk de setup avec la fonction source_rmd trouvée ici : https://stackoverflow.com/questions/41962434/source-code-from-rmd-file-within-another-rmd, car je veux aussi pouvoir générer à part C1.Rmd par exemple.)

Le code ci-dessous marche si je suis dans le dossier A. Comment devrais-je le modifier si je mets synthese1.Rmd dans un dossier B1 ? Est-ce possible ?

Code : Tout sélectionner

source_rmd <- function(file, local = FALSE, ...){
  options(knitr.duplicate.label = 'allow')

  tempR <- tempfile(tmpdir = ".", fileext = ".R")
  on.exit(unlink(tempR))
  knitr::purl(file, output=tempR, quiet = TRUE)

  envir <- globalenv()
  source(tempR, local = envir, ...)
}


#son utilisation

source_rmd('./C1/C1.rmd')
source_rmd('./C2/C2.rmd')
source_rmd('./C3/C3.rmd')


Merci d'avance pour votre aide.

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Rmarkdown et imbrication de fichiers

Messagepar Mickael Canouil » 28 Mar 2022, 08:13

Bonjour,

je ne suis pas sûr de comprendre l'architecture et l'imbrication des Rmarkdown, d'autant plus que "source_rmd", ne compile pas un Rmarkdown, mais executes que le code R de celui-ci en faisant une extraction via knitr::purl.

Un exemple minimale et reproductible ?

PS : fs::dir_tree (https://fs.r-lib.org/reference/dir_tree.html) est pas mal pour afficher la structure d'un dossier/projet.
Mickaël
mickael.canouil.fr | rlille.fr

Jean-Emmanuel Longueville
Messages : 310
Enregistré le : 23 Fév 2011, 08:03

Re: Rmarkdown et imbrication de fichiers

Messagepar Jean-Emmanuel Longueville » 31 Mar 2022, 09:05

Pour insérer des rmd dans un autre j'utilise la syntaxe suivante :

Code : Tout sélectionner

```{r, child=c('relative_path/file1.rmd','relative_path/file2.rmd')}
```
 


Le path relatif par du rmd ou vous écrivez ce code. Si j'ai bien compris Knitr change de working directory à chaque rmd.
Jean-Emmanuel
Ingénieur d'étude LNEC


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité