2015-03-06 12 views
11

Ich fand einen wirklich schönen Trick (link) zu einer Funktion von Knitr, wo Sie Ihre Ausgabe HTML in einem Ausgabeordner und unter einem anderen Dateinamen speichern können.Rmarkdown richtend Ausgabedatei in ein Verzeichnis

Das einzige, was Sie in den Header mit dem Hinterkopf haben, ist die folgende:

title: "analysis" 
author: "Me" 
date: "`r format(Sys.time(), '%d %B, %Y, %H:%M')`" 
knit: (function(inputFile, encoding) { 
     rmarkdown::render(inputFile, 
         encoding=encoding, 
         output_file=file.path(dirname(inputFile), out_dir, 'analysis.html')) }) 
output: 
    html_document: 
    number_sections: yes 
    toc: yes 

Diese ‚manchmal‘ auf meinem Mac funktioniert sehr gut, aber manchmal hat es Probleme bei der out_dir Variable zu finden ...

dachte ich zuerst über die Stücke zum ersten Mal ausgeführt, so dass die Variable gesetzt ... Aber das Problem nicht gelöst ...

I Sitzung auch wieder gestartet R und dies nicht geholfen hat.

Der letzte Schritt war das Schließen von R, Speichern des Arbeitsbereichs und nach dem erneuten Öffnen von R und Laden Arbeitsbereich funktioniert es wieder wie ein Charme.

ich nicht den Original-Beitrag finden konnte, wo jemand diesen Trick empfohlen ...

EXACT WORKFLOW NACHDRUCK es

offen neues Projekt, Namen in einem neuen Ordner testen
ar Abschlag erstellen Dokument
der Änderungskopf an:

--- 
title: "Untitled" 
author: "Me" 
date: "`r format(Sys.time(), '%d %B, %Y, %H:%M')`" 
knit: (function(inputFile, encoding) { 
     rmarkdown::render(inputFile, 
         encoding=encoding, 
         output_file=file.path(dirname(inputFile), out_dir, 'analysis.html')) }) 
output: 
    html_document: 
    number_sections: yes 
    toc: yes 
--- 

```{r write quant output files} 
out_dir <- 'test' 
if(!file.exists(out_dir)) { 
    dir.create(out_dir) 
} 
``` 

das Dokument als test.Rmd speichern
Klicken Sie auf den Knit-Button (html wird jetzt aus den Optionen des Buttons entfernt)
Das wird scheitern!

Schließen Sie das Projekt!
Klicken Sie auf Speichern Umgebung!

Öffnen Sie das Projekt und klicken Sie auf stricken!
Alles funktioniert.

ausführen rm (list = ls()) alles danach wieder funktioniert

+1

Stellen Sie sich vor, dass Code in einer Lauf Säubern Sie R Sitzung. Wie weiß R, was "out_dir" ist, wenn Sie es nicht definiert haben? Wenn dies nach dem erneuten Laden des Arbeitsbereichs funktioniert, liegt dies daran, dass "out_dir" ein Objekt ist, das von der letzten R-Sitzung übernommen wurde, wodurch der Code funktionieren kann, obwohl dies nicht der Fall ist. – Thomas

+0

Sie haben Recht, aber der Befehl wird am Rmakdown-Prozess ausgewertet, wenn der HTML-Code erstellt wird. Ich kann auch die Variable out_dir manuell setzen und es gibt immer noch das gleiche Problem und Rstudio beschwert sich, dass out_dir nicht existiert ... Wenn das Skript einmal ausgeführt wird, kann ich auch rm (list = ls()) ausführen und es funktioniert danach Nun ... Ich denke, es ist nicht nur ein Problem, die Variable zu setzen ... – drmariod

+0

Es gibt keine Möglichkeit, dass dieser Code ohne die Angabe dieser Variable funktionieren kann. Warum es zu funktionieren scheint, ist ohne eine vollständige Beschreibung des von Ihnen verfolgten Workflows schwer zu sagen. – Thomas

Antwort

9

Sie könnten versuchen, die out_dir Variable in der Funktion Einstellung knit zu machen geben:

knit: (function(inputFile, encoding) { 
     out_dir <- 'test'; 
     rmarkdown::render(inputFile, 
         encoding=encoding, 
         output_file=file.path(dirname(inputFile), out_dir, 'analysis.html')) }) 
+0

Ich meine, meine ganze Funktion/rmarkdown funktioniert gut, nachdem ich das r-Projekt wieder geöffnet habe .. Auch wenn ich die gesamte Umgebung entferne, die bereits eingestellt ist ... Also ich frage mich, warum das passiert. Oder kann jemand das von mir gepostete Szenario nicht reproduzieren? Ich habe es auf einem Mac und zwei Windows-Computern versucht und es ist in allen von ihnen reproduzierbar und funktioniert nach dem erneuten Öffnen des R-Projekts. – drmariod

+0

Ja, ich kann es nicht auf meinem Computer arbeiten, wenn ich nicht die Variable 'out_dir' setze – NicE

+0

Ich kann es nicht reproduzieren, ohne die Variable out_dir wie von @NicE – Julian