自动将绘图分配到不同的 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)
)
}
预期输出:
person1_report.doc
将包含 plot1
和 plot2
.
person2_report.doc
将包含 plot3
和 plot4
.
好的,这对你很有用
- 使用 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 ))
```
- 创建一个额外的 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)
}
我有一个地块列表 (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)
)
}
预期输出:
person1_report.doc
将包含plot1
和plot2
.person2_report.doc
将包含plot3
和plot4
.
好的,这对你很有用
- 使用 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 ))
```
- 创建一个额外的 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)
}