2015-02-13 13 views
18

Mit einer R Markdown-Datei möchte ich verschiedene mögliche Ausgabe-PDF-Dokumente erstellen, wobei der Name der Ausgabedatei innerhalb des Dokuments definiert werden sollte. Gibt es eine Möglichkeit, Markdown davon zu überzeugen, den Ausgabedateinamen so zu manipulieren? Idealerweise würde ich den Dateinamen gern an ein r-Chunk übergeben.R Markdown - Name der variablen Ausgabe

+0

könnten Sie Ihren Befehl eingeben? Möchten Sie Dateien "dynamisch" benennen? 'paste0 (" Datei _ ", x,". pdf ")?' x könnte ein Datum oder der Name eines Datensatzes sein – rmuc8

+0

Bisher habe ich RStudio benutzt, um den Strickbefehl auszuführen, ohne genauer in Details zu suchen. Aber ich sollte mir die Antwort von ilyas näher ansehen, klingt nach einem viel klareren Ansatz. – Sosel

Antwort

23

Sie die Einfachheit der Verwendung der RStudio Knit Taste und Reproduzierbarkeit eines YAML-Header unter Verwendung der undokumentierten knit Haken halten, neu zu definieren, was die Taste funktioniert (Standard-Funktion aufgerufen wird rmarkdown::render). Der Parameter output_file der Renderfunktion gibt den Dateinamen an. Wenn Sie ihn also festlegen, überschreiben Sie das Standardverhalten, indem Sie das gleiche Präfix wie den Eingabedateinamen verwenden.

z.B. immer Ausgang genannt eine Datei myfile.pdf

knit: (function(inputFile, encoding) { rmarkdown::render(inputFile, encoding = encoding, output_file = file.path(dirname(inputFile), 'myfile.pdf')) }) 

Die Funktion kann aus einem Paket ein anonymer Einzeiler sowie importiert werden, wie here mit slidify gesehen.

Sie können Ihre eigenen YAML-Header setzen (ich weiß nicht, ob dies überhaupt ratsam ist), zugänglich unter rmarkdown::metadata$newheader, aber sie scheinen nicht innerhalb dieser Art von Funktion verfügbar, soweit ich sehen kann.

Wie übergeben Dateinamen von einem R-Chunk ... wenn Sie Code-Chunks unter dem YAML-Header beziehen, denke ich, dass das nicht möglich ist (?). Header können Inline-R-Befehle enthalten (einzelner Backtick eingeschlossen, beginnend mit r), aber anscheinend nicht für diese Hook-Funktion.

Verwandte:

+0

Fehler in rmarkdown :: Metadaten $ title <- "Mein Titel": Objekt 'rmarkdown' nicht gefunden – jzadra

+0

@yihuixie, kann ich Params übergeben $ was auch immer in den Ausgabedateinamen auf diese Weise? Mein Abschlag verwendet params $ data, um die relevante Datei abzurufen, aber es sieht nicht so aus, als ob dies in Ihrem Einzeiler funktioniert - "params $ data not found". Ich kann alles, was ich will, von einem Skript mit 'rmarkdown :: render (params = list (data =" Oct2017data "), output_file =" Oct2017_analysis.html ")' übergeben, aber natürlich möchte ich es nur einmal eingeben können. – StasK

14

Das ist ziemlich viel, was ich tun:

rmarkdown::render('my_markdown_report.Rmd', 
        output_file = paste('report.', Sys.Date(), 
             '.pdf', sep='')) 

ich drei Skripte haben - man die Daten und Verfahren zieht es, zweite erstellt Diagramme & Tabellen für Bericht. Der dritte erstellt einen Bericht basierend auf der Markdown-Datei. Oben stehende Code der Teil des dritten Skript ist

+0

Bisher habe ich nur den RStudios Knit-Befehl benutzt, um eine Markdown-Datei zu kompilieren.Wenn ich Sie richtig verstehe, erstellen Sie die eigentliche Markdown-Datei mit R-Befehlen und steuern sogar das Stricken des Markdowns mit R-Befehlen? Ich war mir dieser Vorgehensweise bisher nicht bewusst, aber ich werde genauer hinsehen. Bis jetzt habe ich auch die Daten vorbereitet und in einem ersten Skript verarbeitet, aber bereits im zweiten Schritt habe ich manuell eine Markdown-Datei erstellt, die z. verschiedene Datenquellen in einem Bericht. – Sosel

+0

Ja. Markdown-Datei ist eigenständiges Skript, es liest Daten Orte Diagramme und Tabellen zusammen. Es heißt aber von außen Skript - Sie können es auch von Rstudio starten und ausführen und erstellen eine Datei mit dem gleichen Namen. Ich aber nenne es aus separatem Skript und nach rmarkdown erstellt pdf Ergebnisdatei wird an verschiedenen Orten kopiert – ilya

2

Im Anschluss an welchem ​​@ilya schrieb, diese Webseite hat ein großartiges Beispiel, das zeigt, was sie beschreiben, nämlich wie man mehrere reproduzierbare Berichte aus demselben .RMD-Dokument erstellt :

http://www.reed.edu/data-at-reed/software/R/markdown_multiple_reports.html

Die Webseite verwendet zwei Skripte, ein R-Skript und ein Rmarkdown Skript mehrere Berichte zu erstellen. Ich habe es als Vorlage für meine eigene Arbeit verwendet und fand es sehr nützlich.