mar*_*c1s 7 parallel-processing makefile r knitr r-markdown
我创建了一个简单的例子来说明我目前遇到的问题.
我有一个名为example.Rmd的R-markdown文件,其中包含以下代码
```{r}
plot(rnorm(10000))
```
Run Code Online (Sandbox Code Playgroud)
和一个包含以下内容的Makefile文件
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')"
Run Code Online (Sandbox Code Playgroud)
如果我按顺序运行Makefile文件
make
Run Code Online (Sandbox Code Playgroud)
没有问题.
如果我并行运行makefile
make -j 2
Run Code Online (Sandbox Code Playgroud)
knit2html函数生成的块重叠,两个html文件包含相同的图像.
有什么建议吗?我一直在寻找解决方案,但我一无所获.
利用卡尔的想法,我写了一个可能的解决方案。
all : example01.html example02.html
example01.html : example.Rmd
mkdir -p dir_$@
Rscript -e 'library(knitr); opts_knit$$set(base.dir = "dir_$@"); knit2html(input="example.Rmd", output="dir_$@/$@")'
mv dir_$@/$@ .
rm -r dir_$@
example02.html : example.Rmd
mkdir -p dir_$@
Rscript -e 'library(knitr); opts_knit$$set(base.dir = "dir_$@"); knit2html(input="example.Rmd", output="dir_$@/$@")'
mv dir_$@/$@ .
rm -r dir_$@
Run Code Online (Sandbox Code Playgroud)
对于初始代码有两处修改。
并行执行
make -j 2
Run Code Online (Sandbox Code Playgroud)
工作正常。