2015-08-06 13 views
22

Ich habe eine Rmarkdown-Vorlage, die gut funktioniert, und ich habe es parametrisiert, so dass ich Varianten des gleichen Berichts aus verschiedenen Datenquellen generieren kann. Ich möchte jedoch den Titel des Berichts in jedem Fall ändern. Wie mache ich das?Einstellung Dokument Titel in Rmarkdown von Parametern

Hier ist die YAML-Header ich bisher haben:

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

Ich habe versucht params=list(title="ASDF") im Aufruf von rmarkdown::render verwenden, und obwohl mein Code der Variable sehen kann, ist es nicht den Titel ändern. Ich habe auch versucht, r params$title in der YAML zu verwenden, aber das gibt einen Syntaxfehler.

Gibt es noch etwas, das ich versuchen sollte? Vielen Dank!

Antwort

41

Versuchen Sie, einen zweiten YAML-Metadatenblock zu verwenden und die parametrisierten Metadaten dort einzufügen.

Ich habe den folgenden Code wie erwartet zu arbeiten (das heißt, ein Dokument Titel aus der Liste der params Herstellung):

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

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

Die RMarkdown documentation stellt fest, dass YAML Metadatenblöcke von Pandoc kombiniert werden. Verwenden Sie den ersten Block, um den Parametersatz zu definieren, und den zweiten, um die Parameter als Metadaten zu verwenden. Knitr führt den R-Code aus, um die Parameter im zweiten Block zu interpretieren. Dann fügt Pandoc die Metadatenblöcke zusammen.

Update (2017):

Dies kann in einem einzigen Block durchgeführt werden, etwa so:

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

Das funktioniert, weil der Titel nach der params Definition kommt. Um den "Scannerfehler" zu vermeiden, habe ich den Inline-R-Code in Anführungszeichen gesetzt.

+9

Sie können es tatsächlich mit einem einzelnen YAML-Block tun, solange 'title: ...' nach * der 'params' Deklaration kommt. – eipi10

+4

Wenn Sie einen 'Scanner error' erhalten, müssen Sie möglicherweise Anführungszeichen auf beiden Seiten der Backticks angeben (z. B. den Wert als Zeichenfolge für den YAML-Parser definieren). – blmoore

+4

In diesem Beispiel "Mein Titel!" ist eine Textzeichenfolge. Wie würden Sie dies ändern, wenn Sie den Titel dynamisch anhand einer Variablen in den Daten erstellen möchten (die sich je nach Quelle der Daten ändern kann)? –

1

Hinzufügen dieser Antwort, da es hilft, R Markdown-Titel dynamisch zu machen.

Verwenden Sie einfach! R gefolgt von dem definierten Objektnamen (test_title im folgenden Fall), um den Titel dynamisch zu machen.