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'))   
}