Ich habe einen Projektordner, der mein Arbeitsverzeichnis ist. Nennen wir es Projekt. Unter dem Projekt Ordner sind 4 Unterverzeichnisse: code
, data
, figures
und documents
.Arbeiten mit Knitr mit Unterverzeichnissen
Ich möchte meine .Rmd
Datei in das code
Unterverzeichnis legen. Ich möchte, dass die Zahlen in das Unterverzeichnis figures
gehen. Ich möchte die .html
, .md
und .docx
Datei (en) in das documents
Unterverzeichnis gehen. Ich möchte meine Daten aus dem Unterverzeichnis data
einlesen. Ist diese Organisationsstruktur möglich? Ich kann es nicht zur Arbeit bringen.
Ich beginne damit das Arbeitsverzeichnis auf project
zu setzen, weil ich weiß, dass Knitr auf den Ordner mit der .Rmd
Datei schaut und behandelt es als Arbeitsverzeichnis, wenn dies nicht angegeben ist.
Dann versuche ich, die Abbildung Pfad relativ zum Arbeitsverzeichnis.
```{r setchunk, cache=FALSE, include=TRUE}
opts_chunk$set(fig.path = "./figures/")
getwd()
```
Das Arbeitsverzeichnis wird korrekt als project
gemeldet. Die Daten werden korrekt aus dem Unterverzeichnis data
gelesen. Alle Ausgaben werden ordnungsgemäß gerendert und der gesamte Code wird ausgeführt.
```{r readdata}
crctx <- readRDS("./data/crctx.rds")
getwd()
*run lots of analyses here*
```
Aber die Zahlen am Ende statt project/figures
im project/code/figures
Verzeichnis auf.
Ich habe auch versucht, base.dir
Einstellung, aber das scheint nichts zu ändern. Ich habe den Parameter
base.dir = "./figures"
auf die opts_knit$set
Liste. Ich habe sogar versucht, den vollständigen Pfad zu codieren. Aber nichts scheint das zu ändern.
Ich benutze R 3.10 und RStudio 0.98.953. Das ist Mac 0SX 10.9.4.
Fehle ich etwas? Und gibt es eine Möglichkeit, die Ausgabedateien in ein eigenes Verzeichnis zu stellen?
Der Grund, warum dies wichtig ist, ist, dass ich möchte, dass unser Unternehmen die gleiche Verzeichnisstruktur verwendet, und dies ermöglicht uns, unsere Projekte besser zu organisieren.
Vielen Dank im Voraus für jede Hilfe.
Update:
Ich weiß, dass opts_chunk$set(fig.path = "./figures/")
falsch ist. Ich nahm an, dass das Setzen des Wurzelverzeichnisses auf den Projektordner unter Verwendung von opts_knit$set(root.dir = normalizePath("../"))
eine globale Änderung an knitr vornehmen würde, da dies genau das ist, was es tun soll. Und es funktioniert auch für das Unterverzeichnis data, auf das jetzt mit "./data"
zugegriffen werden kann, wodurch der Code ausgeführt werden kann. Die globale Einstellung gilt jedoch nicht für die Zahlenausgabe. Daher lautet die korrekte Spezifikation opts_chunk$set(fig.path = "../figures/")
- unter Verwendung von ../
anstelle von ./
. Ich glaube, Richie Cotton hat das repariert, und ich habe es eine ganze Weile nicht gesehen.
Ich verwendete auch Terminal in OSX, um eine symbolische Verbindung von project/documents
zu project/code/figure
zu erstellen, die standardmäßig von knitr erstellt wird. Damit schaut knitr in das richtige Unterverzeichnis, aber alles endet in projects/documents
. Das hat wirklich gut funktioniert. Ich kann R nicht richtig erstellen, um den symbolischen Link ordnungsgemäß mit file.symlink zu erstellen. Aber es funktioniert gut in Terminal. Stelle dir das vor.
Update 2:
bekam ich die Ausgabedateien als gut zu funktionieren. Sie müssen den Strickbefehl direkt verwenden. Der Text ist unten.
Knitr Code zu stricken einen Abschlag Dokument mit .Rmd in Code/Analyse und Ausgabe in der Ausgabe/Berichten: knit("./code/knitr_file.Rmd", "./documents/knitr_output.md”)
Pandoc Code .md-Datei zu konvertieren .docx - nutzt die gleichen Ordner wie die. Datei md pandoc("./documents/knitr_output.md", format = "docx”)
Ausgabestile (von knitr Dokumentation)
pandoc('knitr_output.md', format='html') # HTML pandoc('knitr_output.md', format='latex') # LaTeX/PDF pandoc('knitr_output.md', format='docx') # MS Word pandoc('knitr_output.md', format='odt') # OpenDocument
Sehen Sie, wenn [ 'normalizePath'] (http://stackoverflow.com/questions/19882198/trouble-finding-file-source-in-rmd-chunk-when-knitting-rmd-from-master- r-Datei) funktioniert für Sie. –
Ich schaute auf die Syntax, und ich konnte nicht herausfinden, was das tun sollte. Aber ich kann noch einen Blick darauf werfen. –