2014-05-14 22 views
7

Stworzyłem prosty przykład pokazujący problem, który obecnie mam.Pliki R przetopienia nakładają się na figury, gdy są porównywane za pomocą Makefile

Mam plik R-Przecena nazwie example.Rmd, zawierający następujący kod

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

oraz plik Makefile o następującej treści

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')" 

Jeśli uruchomić plik makefile sekwencyjnie

make 

nie ma problemu.

Jeśli uruchomię makefile równolegle

make -j 2 

kawałkami generowanego przez knit2html nakładania się funkcji i obu plików HTML zawiera ten sam obraz.

Jakieś sugestie? Szukałem rozwiązania, ale niczego nie znalazłem.

+0

umieścić swoje RMDs we własnym katalogu –

+0

Jest tylko jeden plik Rmd, a nie dwa. Jeden plik R-markdown służący do generowania dwóch różnych plików html. – marc1s

+0

umieść dowiązanie symboliczne do pojedynczego dokumentu z drugiego katalogu –

Odpowiedz

2

Korzystając z idei Karla, napisałem możliwe rozwiązanie.

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] 

Istnieją dwie modyfikacje w odniesieniu do początkowego kodu.

  1. Jak komentuje Karl, podaję się linia opts_knit $ zestaw (base.dir = „dir_example0? .html”) w taki sposób, folder figura to stworzyć w tej ścieżce.
  2. mam swap "i" symbol w komendzie Rscript -E jak skomentował here

wykonanie równoległe

make -j 2 

działa dobrze.