自动将绘图分配到不同的 RMarkdown 文档中

Automate assigning plots into different RMarkdown documents

我有一个地块列表 (100),我想将每 2 个地块分配到一个单独的 rmarkdown 中,并最终将它们转换为 word 文档。以循环、函数或批处理方式执行此操作的最佳方式是什么?

绘图的数据帧

p1 <- rnorm(3000, 1, 2)
p2 <- rnorm(300, 2, 4)
plot1 <- plot(p1)
plot2 <- hist(p1)
plot3 <- plot(p2, type='l')
plot4 <- hist(p2)

隐藏降价的代码

library(rmarkdown)

persons <- c("person1", "person2", "person3")

for (person in persons) {
  rmarkdown::render(input = "template.Rmd",
                    output_file = sprintf("%s_report.doc", person),
                    params = list(testperson = person)
  )
}

预期输出:

好的,这对你很有用

  1. 使用 YAML-header 中人员的参数创建包含所有分析内容、绘图等的 .rmd。然后可以使用 params$person 对报告和图表的数据进行子集化。

---
title: "Untitled"
author: "user12256545"
date: "14 10 2020"
output: html_document
params:
  person:
    value: 1
    choices: [1,2,3]
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(dplyr)

df<- data.frame(person = 1:3, x = rnorm(3), y_value = rnorm(3))
df
```

# The person

```{r}
params$person
```

# plot 

```{r, plot, results='asis'}
# subset the data using the person param:

df_person <- df %>% dplyr::filter(person== params$person) 

# then the plot():

plot(df_person$x,df_person$y_value,
main = paste("Plot for Person",params$person ))

```


  1. 创建一个额外的 R 脚本来循环调用 rmarkdown::render 函数
## 1 write a function to render

render_report = function(person){
  rmarkdown::render(
    "/home/path/to/file.Rmd", params = list(
      person = person
    ),
    output_file = paste0("Report for Person", person, ".html")
  )
}

## use a loop to loop over the function 
## note: 1:3 would be the number of persons (1:100 in your case)

for (i in 1:3) {
  render_report(i)
}