web-dev-qa-db-fra.com

Définition du titre du document dans Rmarkdown à partir des paramètres

J'ai un modèle Rmarkdown qui fonctionne bien et je l'ai paramétré pour que je puisse générer des variantes du même rapport à partir de différentes sources de données. Cependant, je voudrais changer le titre du rapport dans chaque cas. Comment je fais ça?

Voici l'en-tête YAML que j'ai jusqu'à présent:

---
title: "My Title"
author: "Me, Inc."
date: "August 4, 2015"
output: pdf_document
params:
  title: default
---

J'ai essayé d'utiliser params=list(title="ASDF") dans l'appel à rmarkdown::render, Et bien que mon code puisse voir cette variable, il ne change pas le titre. J'ai également essayé d'utiliser r params$title Dans le YAML, mais cela donne une erreur de syntaxe.

Y a-t-il autre chose que je devrais essayer? Merci!

34
Harlan

Essayez d'utiliser un deuxième bloc de métadonnées YAML et placez-y les métadonnées paramétrées.

J'ai obtenu le code suivant pour fonctionner comme prévu (c'est-à-dire produire un titre de document à partir de la liste des paramètres):

---
output: html_document
params: 
    set_title: "My Title!"
---

---
title: `r params$set_title`
---

La documentation RMarkdown note que les blocs de métadonnées YAML sont combinés par Pandoc. Utilisez le premier bloc pour définir le jeu de paramètres et le second pour utiliser les paramètres comme métadonnées. Knitr exécutera le code R pour interpréter les paramètres du deuxième bloc, puis Pandoc fusionnera les blocs de métadonnées ensemble.

Mise à jour (2017):

Cela peut être accompli en un seul bloc, comme ceci:

---
output: html_document
params: 
    set_title: "My Title!"
title: "`r params$set_title`"
---

Cela fonctionne car le titre vient après la définition params. J'ai mis des guillemets autour du code R en ligne pour éviter les "erreurs de scanner".

67
TJ Mahr

Il s'agit d'une approche plus simplifiée du défi du titre dynamique:

Découper le titre de la déclaration du haut comme ceci:

De ceci:

    ---
    title: Sample_Title
    output: pdf_document
    --- 

Pour ça:

    ---
    output: pdf_document
    --- 

    <r code chunks>

    ---
    title: `r name_of_title_variable`
    ---

Dans les morceaux de code R, déclarez 'name_of_title_variable'. Maintenant, le titre est conservé dans une variable. J'espère que cela t'aides!

4
Lahi S

L'ajout de cette réponse permet de rendre les titres de démarque R dynamiques.

Utilisez simplement! R suivi du nom d'objet défini (test_title dans le cas ci-dessous) pour rendre le titre dynamique.

---
output: pdf_document
params:
set_title: !r test_title
---
---
title: `r params$set_title`
---
2
Rishabh