2016-08-05 6 views
8

Ich bin ein neuer Benutzer zu knitr. Ich weiß, dass knitr "auspacken" (aus der Literate-Programmiergemeinschaft) oder Quellcode-Blöcke in eine R-Skriptdatei extrahieren kann. Da ich ein Organisationsmodus-Benutzer bin, bin ich es gewohnt, für jeden Codeblock eine spezifische Datei anzugeben, die möglicherweise die gleiche Datei für verschiedene Blöcke enthält. Beim "Verschlingen" oder Extrahieren der Quelle im Organisationsmodus werden anstelle einer Ausgabecodedatei mehrere Codedateien erzeugt (dies hilft bei der Modularität in großen Projekten).Tangle Knitr Codeblöcke in nicht eine, sondern mehrere Dateien

Ich frage mich, ob etwas ähnliches in knitr möglich ist? Kann ich die Ausgabedatei in Block für Block angeben?

+0

Vielleicht könnten Sie die Frage ein wenig weiter klären. Das Bereitstellen von Beispielen würde helfen. Ich bin ein regelmäßiger Knitrutzer, aber ich habe keine Ahnung, was Sie fragen. –

+0

@ Maxim.K Ich denke der Grund, warum Sie keine Ahnung haben, was Holger fragt, ist, dass die Antwort auf die Frage "Nein" ist. Aber ich stimme völlig zu, die Frage (c/sh) könnte klarer sein. Ich denke, Holger sucht nach einer Chunk-Option, die die Ausgabedatei für 'Purl' auf einer Pro-Chunk-Basis spezifiziert (die nicht existiert, AFAIK). –

+0

@CL ja - genau das habe ich gesucht. Ich erkannte bereits aus dem Handbuch, dass es wahrscheinlich keine "einfache" Option gibt, aber ich hatte gehofft, dass jemand mit mehr Wissenskenntnissen als ich weiß, wie man eine Hook-Funktion irgendeiner Art schreibt, die das tun kann. –

Antwort

3

Es gibt mindestens zwei verschiedene Lesarten Ihrer Frage, die jeweils erfordern etwas andere Workflows.

Wenn jeder Chunk in ein separates Ausgabedokument geschrieben werden soll, dann Modularität unterstützen, sollten Sie den Berichtsteil nach unten in mehrere Dokumente aufgeteilt. Da knitrchild documents unterstützt, können Sie diese immer zu größeren Dokumenten in beliebigen Kombinationen kombinieren, die Sie mögen.

Wenn Sie bedingte Ausführung einiger Brocken wollen, und es gibt ein paar verschiedene Kombinationen von Bedingungen, die ausgeführt werden können, verwenden Sie einen R Markdown YAML-Header und umfassen eine params element.

---- 
params: 
    report_type: "weekly" # should be "weekly" or "yearly" 
---- 

Sie können festlegen, welche Brocken sind Führen Sie die Einstellungen eval und include Chunk-Optionen aus.

```{r, some_chunk, eval = params$report_type == "weekly", include = params$report_type == "weekly"} 
# chunk contents 
``` 
+0

Danke - ich denke du bist schon ziemlich nah dran. Ich will eigentlich nicht jeden Chunk in separate Dateien, ich möchte für jeden Chunk angeben können, in welche Datei er geht (mit möglicherweise mehreren in die gleiche Datei). Ihre bedingte Ausführung kommt mir nahe, außer dass ich sie nicht ausführen will, sondern sie aufschreiben möchte. Aus all den Kommentaren und Antworten, die ich gelesen habe, scheint die Antwort zu sein, dass das, was ich tun möchte, derzeit nicht möglich ist. –

+0

@HolgerHoefling Ja, ich habe versucht, an Arbeitsabläufe zu denken, die Ihren Bedürfnissen entsprechen und mit den aktuellen Fähigkeiten von knitr möglich sind. Manchmal ist es besser, den Arbeitsablauf an die Software anzupassen als umgekehrt. –

Verwandte Themen