rmarkdown::并行渲染

jvidinwx  于 2023-02-06  发布在  其他
关注(0)|答案(2)|浏览(151)

我有一个R包,其中一个函数是produce report。在inst/markdown中,我有一个模板rep. rmd。在包函数ProduceReport()中,我有以下代码:

render.file <-"rep.Rmd"
  render.file <- system.file(TEMPLATES.PATH, render.file, package=getPackageName())
  render.dir <- dirname(render.file)
  pdf.file <- "example.pdf"
  rmarkdown::render(render.file , quiet = FALSE, output_format = "pdf_document")

它可以工作,但是在执行过程中markdown会产生目录临时文件
代表缓存、代表文件
我想并行测试此报告生成功能(当.rmd文件以不同的输入运行并生成不同的报告时)。我的第一个问题是,是否可以并行运行具有不同输入的相同.rmd文件?
我想临时目录应该有唯一的名称,以避免写入相同的文件。
中间目录=,编织根目录=
在**rmarkdown::render()**函数中。但是当我试图用创建的目录定义这个参数时,pandoc产生了错误(rep_cache,rep_files目录仍然在原来的位置)。
拜托,给点建议吧。

z9gpfhce

z9gpfhce1#

正如@Kevin_Arseneau指出的,请看:

library(doParallel)

rpts <- list(list(out="one.html", params=list(some_var="One")),
             list(out="two.html", params=list(some_var="Two")),
             list(out="three.html", params=list(some_var="Three")),
             list(out="four.html", params=list(some_var="Four")))

do_rpt <- function(r) {

  require(rmarkdown)

  tf <- tempfile()
  dir.create(tf)

  rmarkdown::render(input="tstrpt.Rmd",
                    output_file=r$out,
                    intermediates_dir=tf,
                    params=r$params,
                    quiet=TRUE)
  unlink(tf)
  
}

registerDoParallel(cores=3)

foreach(r=rpts, .combine=c) %dopar% do_rpt(r)

样本文件:

---
title: Test Report
output: html_document
params:
  some_var: "default"
  some_date: !r as.Date("2015-01-01")
---

Report for `r params$some_var` run on `r params$some_date`

Source: hrbrmstr

l7wslrjt

l7wslrjt2#

指定不同的output_file。然后该高速缓存和临时目录将以输出文件命名。

相关问题