R标记文件在使用Makefile并行化时与图形重叠
我已经创建了一个简单的示例,展示了我目前遇到的问题 我有一个R标记文件,名为example.Rmd,包含以下代码R标记文件在使用Makefile并行化时与图形重叠,r,parallel-processing,makefile,knitr,r-markdown,R,Parallel Processing,Makefile,Knitr,R Markdown,我已经创建了一个简单的示例,展示了我目前遇到的问题 我有一个R标记文件,名为example.Rmd,包含以下代码 ```{r} plot(rnorm(10000)) ``` 以及包含以下内容的Makefile文件 all : example01.html example02.html example01.html : example.Rmd Rscript -e "library(knitr); knit2html(input='example.Rmd', output='examp
```{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文件包含相同的图像
有什么建议吗?我一直在寻找解决方案,但什么也没找到。利用卡尔的想法,我写了一个可能的解决方案
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
工作正常。将您的Rmd放在它们自己的目录中只有一个Rmd文件,而不是两个。一个R标记文件用于生成两个不同的html文件。将符号链接放在另一个目录的单个文档中Karl,感谢您的回复,但我的问题与目录无关,所有文件都被正确检测到。我的妈妈问题是,当我并行执行knit2html函数时,两个实例都将绘图保存在同一文件夹figures/中,一个实例覆盖了另一个实例,因为它们对figures使用了相同的名称,即“unnamed-chunk-1.png”。如果可能,我需要解决这个特殊问题。如果将Rmd放在单独的目录中,则文件名我不会冲突。您将在每个目录中获得unnamed-chunk-1.png,对吗?