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

rmarkdown::render()无法直接传入params参数问题咨询

问题根因

你的work_formatting.Rmd文件未在YAML元数据头部预声明params参数列表,这是rmarkdown参数化报告的强制要求:传入rmarkdown::render()的params参数只会覆盖YAML中预先声明的对应参数值,不会自动注入未声明的参数。你原Rmd文件没有params的声明,渲染环境中不会自动生成params对象,执行到调用params的代码时就会报对象未找到的错误。

修复方法
  1. 首先修改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内容无需调整。

  1. 直接使用你最初的渲染代码即可运行,不需要在全局环境定义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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:45:07