如何在渲染Quarto文档时访问预渲染脚本中的对象?
Quarto书籍项目:预渲染脚本变量无法访问的问题及解决方法
问题背景
在Quarto书籍项目中,希望将数据准备、函数生成逻辑放在独立.R文件中,通过_quarto.yml的pre-render配置在渲染前自动运行,但在.qmd文件中调用生成的对象时提示找不到;而直接在.qmd中通过source()加载脚本则能正常访问。
相关配置与代码
_quarto.yml配置
project: type: book output-dir: _book pre-render: - utils.R - computations.R book: title: "test_quarto_book" author: "Norah Jones" date: "27.8.2025" chapters: - index.qmd - intro.qmd - summary.qmd - references.qmd toc: true toc-title: Inhalt bibliography: references.bib format: html: theme: cosmo pdf: documentclass: scrbook mainfont: Fira Sans classoption: a4paper, headsepline margin-bottom: 3cm docx: toc-title: Inhalt editor: visual
utils.R工具脚本
test_func <- function(n){n+1}
computations.R计算脚本
df_test <- mtcars df_test$mpg2 <- df_test$mpg + test_func(1)
问题现象
在intro.qmd中使用代码块head(df_test$mpg2)时,渲染提示找不到df_test对象;但在.qmd中直接执行source(utils.R)和source(computations.R)则可正常访问对象。
问题原因
pre-render指定的脚本会在独立的R进程中运行,该进程的工作空间与后续渲染.qmd文件的进程完全隔离,因此脚本中生成的对象、函数不会被传递到文档的渲染环境中。
解决方法
方法一:全局初始化块加载脚本
创建一个全局初始化文件,在其中加载所需脚本,确保所有章节共享对象:
- 创建
setup.qmd文件,内容如下:
--- echo: false --- ```{r setup, include=FALSE} # 加载工具函数与预处理数据 source("utils.R") source("computations.R")
2. 修改`_quarto.yml`的`chapters`配置,将`setup.qmd`放在首位: ```yaml chapters: - setup.qmd - index.qmd - intro.qmd - summary.qmd - references.qmd
方法二:预渲染保存数据,文档加载数据
适合预处理耗时较长的场景,分离计算与渲染流程:
- 修改
computations.R,添加保存数据的代码:
df_test <- mtcars df_test$mpg2 <- df_test$mpg + test_func(1) # 将生成的对象保存到文件 save(df_test, test_func, file = "preprocessed_data.RData")
- 在文档初始化块(或全局
setup.qmd)中加载文件:
```{r setup, include=FALSE} load("preprocessed_data.RData")
内容的提问来源于stack exchange,提问作者Philipp Schulz
相关产品推荐
相关产品推荐

