Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R标记文件在使用Makefile并行化时与图形重叠_R_Parallel Processing_Makefile_Knitr_R Markdown - Fatal编程技术网

R标记文件在使用Makefile并行化时与图形重叠

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标记文件,名为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='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_$@
对于初始代码有两个修改

  • 正如Karl所评论的,我已经包括了线opts_knit$set(base.dir=“dir_example0?.html”),这样就可以在该路径中创建figure文件夹
  • 我已经在Rscript-e命令中交换了“and”符号,如注释所示
  • 并行执行

    make -j 2
    

    工作正常。

    将您的Rmd放在它们自己的目录中只有一个Rmd文件,而不是两个。一个R标记文件用于生成两个不同的html文件。将符号链接放在另一个目录的单个文档中Karl,感谢您的回复,但我的问题与目录无关,所有文件都被正确检测到。我的妈妈问题是,当我并行执行knit2html函数时,两个实例都将绘图保存在同一文件夹figures/中,一个实例覆盖了另一个实例,因为它们对figures使用了相同的名称,即“unnamed-chunk-1.png”。如果可能,我需要解决这个特殊问题。如果将Rmd放在单独的目录中,则文件名我不会冲突。您将在每个目录中获得unnamed-chunk-1.png,对吗?