我正在通过r减价生成几个报告.如果我一个一个地做,一切都会好起来的.如果我使用%do%-也可以.如果我使用%DOPA%-3选项:

  1. 有时候这也没什么.
  2. 有时,报告的名称不同,但内容相同.
  3. 有时Pandoc会失败,并显示错误:PanDoc文档转换失败,错误为%1

如何解决这个问题?

下面的代码在100%的情况下都运行良好:

library(tidyverse)
library(parallel)
library(doParallel)



OutputFolder <- "c:\\temp\\test\\out"
result_foldername <- "Now"

ServersInDB <<- c("server1.ru", "server2.ru")

cores=detectCores(logical = FALSE)

cl <- parallel::makeCluster(cores-1) #not to overload your computer

registerDoParallel(cl)

render_all_obj <- function  (MachineName, OutputFolder, result_foldername)
{
  
  library(rmarkdown)
  render(input = "c:\\temp\\test\\proj\\Report.RMD",
         output_file = paste0(MachineName, ".html"),
         output_dir = file.path (OutputFolder, result_foldername  ),
         params = list(MachineName = MachineName)
  )
  
}

foreach (MachineName = ServersInDB) %do% {
  
  render_all_obj(MachineName, OutputFolder, result_foldername)
}

parallel::stopCluster(cl)

以下是失败的代码.

library(tidyverse)
library(parallel)
library(doParallel)



OutputFolder <- "c:\\temp\\test\\out"
result_foldername <- "Now"

ServersInDB <<- c("server1.ru", "server2.ru")

cores=detectCores(logical = FALSE)

cl <- parallel::makeCluster(cores[1]-1) #not to overload your computer

registerDoParallel(cl)

render_all_obj <- function  (MachineName, OutputFolder, result_foldername)
{
  
  library(rmarkdown)
  render(input = "c:\\temp\\test\\proj\\Report.RMD",
         output_file = paste0(MachineName, ".html"),
         output_dir = file.path (OutputFolder, result_foldername  ),
         params = list(MachineName = MachineName)
  )
  
}

foreach (MachineName = ServersInDB) %dopar% {
  
  render_all_obj(MachineName, OutputFolder, result_foldername)
}

parallel::stopCluster(cl)

这是我的RMD:


---
output:
  html_document:
    toc: true
    dev: 'svg'
    number_sections: true
    toc_depth: 2
    toc_float: true
    theme: cerulean
    toc_collapsed: true
    self_contained: true
    mathjax: NULL

params: 
  MachineName: "ServerName" #name of server to analyze

---



```{r , echo=FALSE, include=FALSE, results='hide'}

MachineName <- params$MachineName

```



---
title: "My report is about: `r MachineName`"

---

推荐答案

问题是-名称为Report.knit.md的文件.默认情况下,它在rmarkdown::render函数的参数input指定的目录中创建.这是所有并行进程的相同目录.所有进程都在try 对同一文件执行创建、读、写操作.

解决方法是 for each 进程使用intermediates_dir个参数和唯一的临时目录.

工作解决方案:

registerDoFuture()

workers <- parallel::detectCores(logical = FALSE) - 1
future::plan(multisession, workers = workers)


ServersInDB <- c("server1.ru", "server2.ru")

render_all_obj <- function  (MachineName)
{
  
  OutputFolder <- "c:/temp/test/out"
  result_foldername <- "Now"
  
  library(rmarkdown)
  
  tf <- tempfile()
  dir.create(tf)
  
  render(input = "c:/temp/test/proj/Report.RMD",
         output_file = paste0(MachineName, ".html"),
         intermediates_dir=tf,
         output_dir = file.path (OutputFolder, result_foldername),
         params = list(MachineName = MachineName)
  )
  
  unlink(tf)
  
}


ServersInDB %>% furrr::future_map(render_all_obj)

R相关问答推荐

try 在Powershell中运行R(编程语言)会重复最后一个命令

用R从API中提取数据

如何将Rmarkdown中包含图像和文本的行的两个单元格与.PDF输出垂直对齐?

pivot_longer:names_to和names_pattern

如何替换某个字符的所有出现,但如果该字符是字符串中的第一个,则不替换?

使用列表列作为case_when LHS的输入

如何使用行政边界形状文件中的人口普查数据调整格栅数据集中的人口数据

R gtsummary tBL_summary,包含分层和两个独立分组变量

将Multilinetring合并到一个线串中,使用sf生成规则间隔的点

基于R中的GPS点用方向箭头替换点

创建重复删除的唯一数据集组合列表

根据列表中项目的名称多次合并数据框和列表

如何对数据集进行逆向工程?

将年度数据插入月度数据

矩阵的堆叠条形图,条形图上有数字作为标签

正在导出默认的RStudio主题,还是设置括号 colored颜色 ?

将摘要图添加到facet_WRAP gglot的末尾

为什么在写入CSV文件时Purrr::Pwalk不起作用

R中时间间隔的大向量与参考时间间隔的相交

在ggplot2图表中通过端点连接点