我创建了一个简单的例子来展示我目前遇到的问题。
我有一个名为 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 文件包含相同的图像。
有什么建议吗?我一直在寻找解决方案,但一无所获。
最佳答案
使用 Karl 的想法,我编写了一个可能的解决方案。
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
工作正常。
关于使用 Makefile 并行化时,R markdown 文件与图形重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23648815/