r语言 - 使用与RMarkdown平行



我正在尝试使用与RMarkdown并行。R代码调用一个名为report.RMD的脚本。目标是从虹膜数据集生成3个html报告,每个报告都以物种命名,其中有一个表,过滤到该物种。问题是,虽然呈现了报告,但表没有过滤到该物种,例如,virginica.html文档列出了versicolor物种。这似乎是一个并行化问题,因为当%dopar%更改为%do%时,html报告将按预期生成。

更广泛的目标是使用大规模并行处理与RMarkdown比使用下面这个例子,但只是作为一个例子。

R代码为:

library(doParallel)
library(tidyverse)
iris_list<-c("virginica","versicolor", "setosa")
no_cores <- detectCores() - 1  
cl <- makeCluster(no_cores)  
registerDoParallel(cl)  
foreach(i = 1:length(iris_list), .packages = (.packages())) %dopar% {
cat<-iris_list[i]
iris2<-iris%>%filter(Species==cat)

rmarkdown::render("report.RMD",
output_file = paste0(cat, ".html"))
}  
stopCluster(cl)

RMD代码为:

---
title: "Untitled"
date: "28 September 2021"
output: html_document
---

```{r table, echo=FALSE}
iris2

找到一个方法:https://gist.github.com/hrbrmstr/17bc21af55392f23f012f57bb2fda51c#file-do_rpt-r

library(doParallel)
library(tidyverse)
# Define report parameters
reports <- list(list(out="setosa.html", params=list(sp="setosa")),
list(out="virginica.html", params=list(sp="virginica")),
list(out="versicolor.html", params=list(sp="versicolor")))
make_report <- function(r) {

require(rmarkdown)

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

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

}
no_cores <- detectCores() - 1  
cl <- makeCluster(no_cores)  
registerDoParallel(cl)  
foreach(r=reports, .combine=c) %dopar% make_report(r)
stopCluster(cl)

Rmarkdown文件:

---
title: "Untitled"
date: "28 September 2021"
output: html_document
params:
sp: "default"
---
```{r}
data(iris)
iris[iris$Species == params$sp,]

(加上r-chunk后面的三个'…堆栈格式混乱)。

最新更新