rmarkdown::render()无法直接传入params参数问题咨询
问题根因
你的work_formatting.Rmd文件未在YAML元数据头部预声明params参数列表,这是rmarkdown参数化报告的强制要求:传入rmarkdown::render()的params参数只会覆盖YAML中预先声明的对应参数值,不会自动注入未声明的参数。你原Rmd文件没有params的声明,渲染环境中不会自动生成params对象,执行到调用params的代码时就会报对象未找到的错误。
修复方法
- 首先修改
work_formatting.Rmd的YAML头部,添加params参数声明,可根据需求设置默认值,示例如下:
--- title: "`r params$doc_title`" author: "Paul M. Hargarten" params: doc_title: "默认标题" date: !r lubridate::today() site_number: 1 ---
其余Rmd内容无需调整。
- 直接使用你最初的渲染代码即可运行,不需要在全局环境定义
params对象:
library(rmarkdown) library(lubridate) # 若my_word()为自定义输出格式,请提前加载对应函数或依赖包 number <- c(100, 200, 300) for(i in 1:3){ rmarkdown::render( input = "work_formatting.Rmd", output_file = paste0("word_formatting_", number[i], ".docx"), output_format = my_word(), params = list( doc_title = "Some_title", date = lubridate::today(), site_number = number[i] ), clean = TRUE, quiet = FALSE ) }
补充说明
你之前在全局定义params后可以正常运行,确实是因为rmarkdown::render()默认使用的渲染环境继承自父环境(即你执行代码的全局环境),属于非规范的巧合用法。如果后续调整渲染环境隔离规则(比如指定envir = new.env()参数),该写法会直接失效,不建议长期使用。
内容的提问来源于stack exchange,提问作者phargart
相关产品推荐
相关产品推荐

