如何通过循环在Rmarkdown的每份报告中显示对应图片?
为班级报告自动插入对应图片的RMarkdown实现
你已经实现了通过循环生成不同班级的PDF报告,现在要给每个班级(100、200、300)插入对应名称的图片(100.jpg、200.jpg、300.jpg),最优方案是在Rmd文件中利用传入的参数动态加载图片,逻辑更集中,无需修改循环脚本的核心逻辑。
步骤1:修正循环脚本的小问题
你的脚本中output_file的sprintf使用了两个占位符,但仅传入prof参数,导致班级信息未出现在文件名中,修正如下:
class_list <- list( list(prof = "Colegio 1", class = "100"), list(prof = "Colegio 2", class = "200"), list(prof = "Colegio 3", class = "300") ) purrr::walk(class_list, function(class_info) { prof <- class_info$prof class <- class_info$class rmarkdown::render( input = "C:/Users/seare/OneDrive/Documentos/R/win-library/4.0/pdfreport/example/Untitled/Informes_MueveTP.Rmd", output_file = sprintf("C:/Users/seare/downloads/Report_output_%s_%s.pdf", prof, class), params = list(prof = prof, class = class) ) })
步骤2:修改Rmd文件动态加载图片
在Rmd的代码块中,利用params$class拼接图片文件名,替换固定的图片路径:
--- title: "`r params$prof`" author: "RBD `r params$class`" date: 10-10-2022 params: prof: "Colegios de Media" class: "RBD de la Escuela" logo: logo.jpg cover: background.jpg iblue: 2b4894 igray: d4dbde documentclass: article fontsize: 10 papersize: a4paper output: IReports::businessReport: keep_tex: TRUE latex_engine: xelatex resetStyleFiles: FALSE header-includes: - \newcommand{\logo}{`r gsub("_", "\\_", params$logo)`} - \newcommand{\cover}{`r gsub("_", "\\_", params$cover)`} - \newcommand{\iblue}{`r params$iblue`} - \newcommand{\igray}{`r params$igray`} include-before: - \renewcommand{\contentsname}{Inhaltsverzeichnis} - \renewcommand{\pagename}{Seite} --- ```{r setup, include = FALSE} # packages library(dplyr) library(knitr) library(xtable) # settings knitr::opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE)
# 动态生成对应班级的图片路径 img_path <- sprintf("C:/Users/seare/OneDrive/Documentos/R/win-library/4.0/pdfreport/example/Untitled/%s.jpg", params$class) knitr::include_graphics(img_path)
### 为什么选择在Rmd中处理? - 逻辑清晰:图片与班级的对应关系直接在报告模板中体现,无需在脚本中额外维护路径映射 - 扩展性强:后续调整图片路径时,仅需修改Rmd中的路径模板,不用改动循环逻辑 内容的提问来源于stack exchange,提问作者Mister_Paints
相关产品推荐
相关产品推荐

