首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在RMarkdown中使用doParallel

在RMarkdown中使用doParallel
EN

Stack Overflow用户
提问于 2021-09-28 16:28:42
回答 1查看 107关注 0票数 1

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

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

R代码是:

代码语言:javascript
复制
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代码为:

代码语言:javascript
复制
---
title: "Untitled"
date: "28 September 2021"
output: html_document
---



```{r table, echo=FALSE}

iris2

代码语言:javascript
复制
EN

回答 1

Stack Overflow用户

发布于 2021-09-28 17:03:23

在这里找到了一种方法:https://gist.github.com/hrbrmstr/17bc21af55392f23f012f57bb2fda51c#file-do_rpt-r

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
---
title: "Untitled"
date: "28 September 2021"
output: html_document
params:
  sp: "default"
---

```{r}

数据(虹膜)

irisiris$种==参数$sp,

代码语言:javascript
复制

(加上r-块的三个尾随`...堆栈格式混乱)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69365352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档