Quarto Book中如何让R包在所有.qmd页面全局生效?
Quarto Book 包全局生效问题解析
问题原因
Quarto Book 里的每个 .qmd 文件默认都是独立的执行单元,渲染时会为每个文件启动单独的 R 会话。这意味着你在 data.qmd 中加载的包只存在于它对应的 R 会话里,results.qmd 的独立会话无法访问这些已加载的包,所以会出现找不到包的报错。
解决方法
方法1:通过 _quarto.yml 配置全局前置代码
在项目根目录的 _quarto.yml 文件中,添加全局执行的前置代码块,让所有页面渲染前自动加载需要的包:
execute: before-code: | library(minfi) library(tidyverse)
这样每个 .qmd 文件在渲染时,都会先执行这段代码加载指定包,无需在每个文件里重复写加载语句。
方法2:使用全局 setup 脚本
- 在项目根目录创建一个
setup.R文件,写入包加载和其他全局设置代码:
library(minfi) library(tidyverse) # 还可以添加其他全局配置,比如设置 ggplot 主题、全局选项等
- 然后在
_quarto.yml中配置调用这个脚本:
execute: before-code: source("setup.R")
这种方式更灵活,方便统一管理所有全局初始化操作,后续要调整包或添加其他设置时,只需要修改 setup.R 即可。
方法3:每个页面单独加载包(适合差异化需求)
如果不同页面需要的包差异较大,可以在每个 .qmd 文件的开头单独加载所需包。但如果是所有页面都需要的通用包,前两种方法更高效。
内容的提问来源于stack exchange,提问作者ramiro
相关产品推荐
相关产品推荐

