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

如何在渲染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文件的进程完全隔离,因此脚本中生成的对象、函数不会被传递到文档的渲染环境中。

解决方法

方法一:全局初始化块加载脚本

创建一个全局初始化文件,在其中加载所需脚本,确保所有章节共享对象:

  1. 创建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

方法二:预渲染保存数据,文档加载数据

适合预处理耗时较长的场景,分离计算与渲染流程:

  1. 修改computations.R,添加保存数据的代码:
df_test <- mtcars 
df_test$mpg2 <- df_test$mpg + test_func(1)

# 将生成的对象保存到文件
save(df_test, test_func, file = "preprocessed_data.RData")
  1. 在文档初始化块(或全局setup.qmd)中加载文件:
```{r setup, include=FALSE}
load("preprocessed_data.RData")
内容的提问来源于stack exchange,提问作者Philipp Schulz
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 07:53:15