R 中带有子组循环的多个自动报告
Multiple Automatic Reports with Subgroup Loop in R
我正在尝试为基于训练中心城市的健身测试数据创建自动 PDF RMarkdown 报告。
我相信我已经非常接近这里的大纲了:
但是,尽管两者的名称不同(report.A.pdf 和 report.B.pdf),但它只为 1 个中心创建了包含相同数据的报告。如何让子组正确循环以显示来自不同集线器的数据?
示例数据:
Date Athlete Test Average Hub
1 2019-06-03 Athlete1 Broad_Jump 175.000000 A
2 2019-06-10 Athlete1 Broad_Jump 187.000000 A
3 2019-06-10 Athlete2 Broad_Jump 200.666667 B
4 2019-06-10 Athlete3 10m_Sprint 1.831333 B
5 2019-06-10 Athlete2 10m_Sprint 2.026667 B
6 2019-06-17 Athlete1 Broad_Jump 191.500000 A
7 2019-06-17 Athlete2 Broad_Jump 200.666667 B
8 2019-06-17 Athlete3 10m_Sprint 1.803667 B
9 2019-06-17 Athlete2 10m_Sprint 2.090000 B
10 2019-06-24 Athlete1 Broad_Jump 192.000000 A
用于呈现 RMarkdown 的 R 脚本
WT <- read.csv("WT.csv")
for (hub in unique(WT$Hub)){
subgroup <- subset(WT, Hub == hub)
render("Hub_Test.rmd",output_file = paste0('report.', hub, '.pdf'))
}
RMarkdown 文件 (Hub_Test.rmd):
WT <- read.csv("WT.csv")
for (hub in unique(WT$Hub)){
subgroup <- subset(WT, Hub == hub)
}
summary(subgroup)
此设置在我的工作目录中创建了 2 个只有 A 数据的 PDF。我一定是漏掉了什么。
hub
传递给Hub_Test.rmd
,所以你不需要在rmd文件中写循环。另一个问题是我认为 pandoc 在使用 summary
写入 pdf 时存在一些问题,所以我在这里使用 html 输出,但总体思路是相同的。
Hub_Test.rmd
```{r, echo=FALSE}
WT <- structure(list(Athlete = structure(2:1, .Label = c("Athlete2", "Athlete1"
), class = "factor"), Test = structure(2:1, .Label = c("10m_Sprint",
"Broad_Jump"), class = "factor"), Hub = structure(2:1, .Label = c("A",
"B"), class = "factor")), class = "data.frame", row.names = c(NA,
-2L))
subgroup <- subset(WT, Hub == hub)
summary(subgroup)
```
生成脚本
library(rmarkdown)
NWT <- structure(list(Athlete = structure(2:1, .Label = c("Athlete2", "Athlete1"
), class = "factor"), Test = structure(2:1, .Label = c("10m_Sprint",
"Broad_Jump"), class = "factor"), Hub = structure(2:1, .Label = c("A",
"B"), class = "factor")), class = "data.frame", row.names = c(NA,
-2L))
for (hub in unique(WT$Hub)){
subgroup <- subset(WT, Hub == hub)
render("Hub_Test.rmd",output_file = paste0('report.', hub, '.html'))
}
我正在尝试为基于训练中心城市的健身测试数据创建自动 PDF RMarkdown 报告。
我相信我已经非常接近这里的大纲了:
但是,尽管两者的名称不同(report.A.pdf 和 report.B.pdf),但它只为 1 个中心创建了包含相同数据的报告。如何让子组正确循环以显示来自不同集线器的数据?
示例数据:
Date Athlete Test Average Hub
1 2019-06-03 Athlete1 Broad_Jump 175.000000 A
2 2019-06-10 Athlete1 Broad_Jump 187.000000 A
3 2019-06-10 Athlete2 Broad_Jump 200.666667 B
4 2019-06-10 Athlete3 10m_Sprint 1.831333 B
5 2019-06-10 Athlete2 10m_Sprint 2.026667 B
6 2019-06-17 Athlete1 Broad_Jump 191.500000 A
7 2019-06-17 Athlete2 Broad_Jump 200.666667 B
8 2019-06-17 Athlete3 10m_Sprint 1.803667 B
9 2019-06-17 Athlete2 10m_Sprint 2.090000 B
10 2019-06-24 Athlete1 Broad_Jump 192.000000 A
用于呈现 RMarkdown 的 R 脚本
WT <- read.csv("WT.csv")
for (hub in unique(WT$Hub)){
subgroup <- subset(WT, Hub == hub)
render("Hub_Test.rmd",output_file = paste0('report.', hub, '.pdf'))
}
RMarkdown 文件 (Hub_Test.rmd):
WT <- read.csv("WT.csv")
for (hub in unique(WT$Hub)){
subgroup <- subset(WT, Hub == hub)
}
summary(subgroup)
此设置在我的工作目录中创建了 2 个只有 A 数据的 PDF。我一定是漏掉了什么。
hub
传递给Hub_Test.rmd
,所以你不需要在rmd文件中写循环。另一个问题是我认为 pandoc 在使用 summary
写入 pdf 时存在一些问题,所以我在这里使用 html 输出,但总体思路是相同的。
Hub_Test.rmd
```{r, echo=FALSE}
WT <- structure(list(Athlete = structure(2:1, .Label = c("Athlete2", "Athlete1"
), class = "factor"), Test = structure(2:1, .Label = c("10m_Sprint",
"Broad_Jump"), class = "factor"), Hub = structure(2:1, .Label = c("A",
"B"), class = "factor")), class = "data.frame", row.names = c(NA,
-2L))
subgroup <- subset(WT, Hub == hub)
summary(subgroup)
```
生成脚本
library(rmarkdown)
NWT <- structure(list(Athlete = structure(2:1, .Label = c("Athlete2", "Athlete1"
), class = "factor"), Test = structure(2:1, .Label = c("10m_Sprint",
"Broad_Jump"), class = "factor"), Hub = structure(2:1, .Label = c("A",
"B"), class = "factor")), class = "data.frame", row.names = c(NA,
-2L))
for (hub in unique(WT$Hub)){
subgroup <- subset(WT, Hub == hub)
render("Hub_Test.rmd",output_file = paste0('report.', hub, '.html'))
}