我正在尝试在RMarkdown中使用doParallel。R代码调用一个名为report.RMD的脚本,目标是从虹膜数据集生成3个html报告,每个报告都以物种命名,并在中使用一个筛选到该物种的表。问题是,尽管呈现了报告,但表没有过滤到该物种。例如,virginica.html文档中列出了杂色物种。这似乎是一个并行化问题,因为当%dopa%更改为%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
发布于 2021-09-28 17:03:23
在这里找到了一种方法: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}数据(虹膜)
irisiris$种==参数$sp,
(加上r-块的三个尾随`...堆栈格式混乱)。
https://stackoverflow.com/questions/69365352
复制相似问题