2015-08-06 41 views
22

Ho un modello Rmarkdown che funziona bene e l'ho parametrizzato in modo da poter generare varianti dello stesso report da diverse origini dati. Tuttavia, mi piacerebbe cambiare il titolo del rapporto in ogni caso. Come lo faccio?Impostazione del titolo del documento in Rmarkdown dai parametri

Ecco l'intestazione YAML che ho finora:

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

Ho provato con params=list(title="ASDF") nella chiamata a rmarkdown::render, e anche se il mio codice può vedere che variabile, non cambia il titolo. Ho anche provato a utilizzare r params$title in YAML, ma questo dà un errore di sintassi.

C'è qualcos'altro che dovrei provare? Grazie!

risposta

41

Provare a utilizzare un secondo blocco di metadati YAML e inserire i metadati parametrizzati.

ho ottenuto il seguente codice funzioni come previsto (vale a dire, la produzione di un titolo del documento dalla lista dei params):

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

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

Le RMarkdown documentation note che blocca metadati YAML sono combinati per Pandoc. Utilizzare il primo blocco per definire il set di parametri e il secondo per utilizzare i parametri come metadati. Knitr eseguirà il codice R per interpretare i parametri nel secondo blocco. Quindi Pandoc unirà i blocchi di metadati insieme.

Update (2017):

Questo può essere realizzato in un unico blocco, in questo modo:

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

Questo funziona perché il titolo viene dopo la definizione params. Inserisco virgolette sul codice R in linea per prevenire "errori dello scanner".

+9

Si può effettivamente farlo con un solo blocco YAML fino a quando 'titolo: ...' viene * dopo * la dichiarazione 'params'. – eipi10

+4

Se si ottiene un 'Errore scanner', potrebbero essere necessari dei segni di virgola su entrambi i lati dei backtick (ad esempio, rendere il valore una stringa per il parser YAML). – blmoore

+4

In questo esempio "Il mio titolo!" è una stringa di testo. Come cambieresti questo se volessi che il titolo sia creato dinamicamente in base a una variabile nei dati (che può cambiare in base all'origine di quei dati)? –

1

Aggiungere questa risposta aiuta a rendere dinamici i titoli di markdown R.

Basta usare! R seguito dal nome dell'oggetto definito (test_title nel caso in basso) per rendere dinamico il titolo.

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