2014-10-07 2 views
5

UPDATE: Scheint wie meine Frage ist eigentlich ein sehr nahes Duplikat von this question und nach diesem Thread gibt es derzeit keine "einfache" Lösung. Allerdings ist diese Frage jetzt über ein Jahr alt und die Zeit könnte sich geändert haben (man kann hoffen!).Wie schreibe ich einen Artikel mit abstrakten Referenzdaten, die noch nicht berechnet wurden?

Meine ursprüngliche Frage folgt:


Ich denke, dass ich eine Art Mechanismus benötigen Sie den Text und oder R Brocken im Dokument neu zu ordnen, wie sie gestrickt wird. Ich möchte ein "article" style Dokument mit einem Abstract und einer Zusammenfassung am Anfang schreiben, bevor ich in irgendeinen R Code komme, der aber "forward" -Referenzen zu Dingen enthält, die im R Code.

Also meine Exec Zusammenfassung am Anfang könnte

We found a `r final_correlation/100`% correlation between x and y... 
sein aber "final_correlation" wird am Ende des Dokuments berechnet werden, während ich alle Schritte der reproduzierbaren Forschung durchlaufen.

In der Tat, wenn ich über reproduzierbare Forschung lese, sehe ich oft Kommentare, dass die Dokumentation oft besser außerhalb der Programmiersequenz präsentiert werden kann.

Ich glaube, dass in anderen literarischen Programmier-Frameworks die Brocken in einer anderen Reihenfolge als die, in denen sie präsentiert wurden verwirrt werden können. Wie kann ich das in knitr erreichen? Oder gibt es andere völlig andere Arbeitsabläufe oder Muster, die ich anwenden könnte, um das gewünschte Ergebnis zu erzielen?

+3

Eine Möglichkeit: Trennen Sie die Datenverarbeitung In ein R-Skript, Quelle, dass R-Skript am Anfang Ihres Dokuments und alle Daten für Sie verfügbar wären. – A5C1D2H2I1M1N2O1R2T1

+0

Eine weitere Option ist die Verwendung von 'brew', um das Dokument vor zu verarbeiten. – baptiste

Antwort

1

Es gibt keine Möglichkeit, die Reihenfolge zu definieren, um alle Codebausteine ​​in knitr im Moment zu evaluieren. Eine Idee, die mir einfällt, ist, das Abstract am Ende des Artikels zu schreiben und es am Anfang aufzunehmen. Ein Überblick:

  • article.Rmd
  • abstract.Rmd

In article.Rmd:

Title. 

Author. 

Abstract. 

```{r echo=FALSE, results='asis'} 
if (file.exists('abstract.md')) { 
    cat(readLines('abstract.md'), sep = '\n') 
} else { 
    cat('Abstract not ready yet.') 
} 
``` 

More code chunks. 

```{r} 
x <- 1:10 
y <- rnorm(10) 
final_correlation <- cor(x, y) 
``` 

Body. 

```{r include=FALSE} 
knitr::knit('abstract.Rmd') # generates abstract.md 
``` 

In abstract.Rmd:

We found a `r final_correlation/100`% correlation between x and y... 
+0

Ich bekomme, dass dies eine großartige Möglichkeit ist, das DRY-Prinzip so zu halten, dass "knitr" funktioniert. Ich hatte auf eine One-File-Lösung gehofft. Und ich habe meine Antwort für heute, danke! – dsz

Verwandte Themen