You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单个Rmd模板生成多页面Rmarkdown网站?

问题

使用Rmarkdown构建网站时,通过循环渲染带参数的模板页面(templates/page.rmd),生成的页面顶部缺失_site.yml中定义的导航栏,需要非Shiny的解决方法。

解决方案核心

单独调用rmarkdown::render()渲染模板不会读取_site.yml的全局网站配置(包括导航栏),必须将这些模板页面纳入rmarkdown::render_site()的处理流程,才能让页面应用导航栏等全局样式。

具体修改步骤
  1. 修正模板文件的参数引用错误,确保代码能正确读取传入的数据集
  2. 调整渲染逻辑,先将模板页面渲染到项目根目录(而非直接写入_site)
  3. 统一调用rmarkdown::render_site()处理所有页面,应用导航栏配置
  4. 修正_site.yml中导航链接与输出文件名的一致性

1. 修正模板文件 templates/page.rmd

---
params:
  data_set: NULL  # 明确参数默认值
title: "Region results"
---

```{r}
# 修正参数引用拼写错误:params$data_set 而非 param$dataset
hist(params$data_set$Sepal.Length)
## 2. 修正渲染脚本 `script.R`
```r
# 清理旧的_site目录(可选,避免缓存干扰)
unlink("_site", recursive = TRUE)

# 定义要处理的物种列表
species_list <- c("versicolor", "setosa")

# 循环渲染模板页面到项目根目录
for (sp in species_list) {
  # 过滤数据:注意iris数据集的物种列名是大写的Species
  data_filtered <- dplyr::filter(iris, Species == sp)
  
  rmarkdown::render(
    input = "templates/page.rmd",
    params = list(data_set = data_filtered),
    output_file = paste0(sp, ".html"),
    output_dir = getwd()  # 输出到项目根目录,让render_site能识别并处理
  )
}

# 统一渲染整个网站,应用_site.yml的导航栏配置
rmarkdown::render_site()

3. 修正 _site.yml 的导航链接

确保导航菜单中的href与输出文件名完全匹配:

name: "website"
navbar:
  title: "website"
  left:
  - text: "global info"
    href: index.html
  - text: "species"
    menu:
        - text: "all species result"
          href: all.html
        - text: "---------"
        - text: "versicolor"
          href: versicolor.html  # 修正为匹配输出文件名
        - text: "setosa"
          href: setosa.html
额外注意事项
  • 避免直接将渲染结果写入_site目录:该目录是render_site()的自动输出目录,手动写入的文件不会被应用全局配置
  • 确保变量拼写一致:比如species向量的遍历、iris数据集的列名Species、模板中的参数名data_set
  • 如果需要隐藏模板文件不被网站默认渲染,可以在_site.yml中添加exclude: ["templates/"]配置,但本场景无需设置,因为我们已主动触发模板渲染

内容的提问来源于stack exchange,提问作者sbenateau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 16:00:50