如何在 Rmarkdown 中参数化内联代码、文本以及 R 代码块

How to parameterize the inline code, text, together with R code chunk in Rmarkdown

在我的 Rmarkdown 报告中,大部分部分都有相同的文本、内联代码和 R 代码块。是否可以参数化它们?例如下图,是否可以使用类似 for 循环的方式来生成它们,而不是重复类似的代码 3 次?

恕我直言,实现此目的的最简单方法是使用 results = 'asis',下面的 cat() 是一个最小的 Markdown 文件。

---
title: "Minimal example"
---

```{R results = "asis"}
for (i in 1:3) {
 x <- runif(10)
 cat("# section", floor(i), "\n")
 plot(x)
 # line break
 cat("\n\n")
}
```

在主 RMD 文件中,

library(tidyverse)

dat <- tibble(
  id = 1:3,
  fruit = c("apple", "orange", "banana"),
  sold = c(10, 20, 30)
)
res <- lapply(dat$id, function(x) {
  knitr::knit_child(
    'template.Rmd', envir = environment(), quiet = TRUE
  )
})
cat(unlist(res), sep = '\n')

在template.RMD,

current_dat <- filter(dat, id == x)
# Section: `r  current_dat$fruit`
current_dat %>% 
  ggplot(aes(x = fruit, y = sold)) + geom_col()