2014-05-14 4 views
7

Ich habe ein einfaches Beispiel erstellt, das das Problem, das ich derzeit habe.R Markdown-Dateien überlappen Zahlen bei der Parallelisierung mit Makefile

Ich habe eine R-Abschlag Datei mit dem Namen example.Rmd, den folgenden Code enthält,

```{r} 
plot(rnorm(10000)) 
``` 

und ein Makefile mit folgendem Inhalt

all : example01.html example02.html 

example01.html : example.Rmd 
    Rscript -e "library(knitr); knit2html(input='example.Rmd', output='example01.html')" 

example02.html : example.Rmd 
    Rscript -e "library(knitr); knit2html(input='example.Rmd', output='example02.html')" 

Wenn ich die Datei Makefile nacheinander ausführen

make 

gibt es kein Problem.

Wenn ich die Make-Datei in parallel

make -j 2 

die Chunks, die durch knit2html Funktion Überlappungs- und beide HTML-Dateien enthält, das gleiche Bild ausgeführt werden.

Irgendwelche Vorschläge? Ich habe nach einer Lösung gesucht, aber ich habe nichts gefunden.

+0

setzen Sie Ihre RMDS in ihrem eigenen Verzeichnis –

+0

Es gibt nur eine Rmd-Datei, nicht zwei. Eine R-Markdown-Datei, die verwendet wird, um zwei verschiedene HTML-Dateien zu generieren. – marc1s

+0

legen Sie eine symbolische Verknüpfung zu dem einzelnen Dokument aus dem anderen Verzeichnis –

Antwort

2

Mit der Idee von Karl habe ich eine mögliche Lösung geschrieben.

all : example01.html example02.html 

example01.html : example.Rmd 
    mkdir -p [email protected] 
    Rscript -e 'library(knitr); opts_knit$$set(base.dir = "[email protected]"); knit2html(input="example.Rmd", output="[email protected]/[email protected]")' 
    mv [email protected]/[email protected] . 
    rm -r [email protected] 

example02.html : example.Rmd 
    mkdir -p [email protected] 
    Rscript -e 'library(knitr); opts_knit$$set(base.dir = "[email protected]"); knit2html(input="example.Rmd", output="[email protected]/[email protected]")' 
    mv [email protected]/[email protected] . 
    rm -r [email protected] 

Es gibt zwei Modifikationen bezüglich des ursprünglichen Codes.

  1. Als Karl kommentiert, habe ich die Linie opts_knit $ Set enthalten (base.dir = "dir_example0? .html") in einer solchen Art und Weise die Figur Ordner in diesem Pfad erstellen ist.
  2. Ich habe swap "und" Symbol in Rscript -en Befehl als here

parallele Ausführung
make -j 2 

funktioniert gut kommentiert.

Verwandte Themen