我创建了一个简单的示例,显示了我目前遇到的问题。
我有一个名为example.Rmd的R-markdown文件,其中包含以下代码
```{r}
plot(rnorm(10000))
```
和包含以下内容的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')"
如果我按顺序运行Makefile文件
make
没有问题。
如果我并行运行makefile
make -j 2
knit2html函数生成的块重叠,两个html文件包含相同的图像。
有什么建议吗?我一直在寻找解决方案,但我一无所获。
答案 0 :(得分:2)
使用卡尔的想法,我写了一个可能的解决方案。
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_$@
初始代码有两处修改。
并行执行
make -j 2
工作正常。