Quarto文档无法识别targets项目目录的问题求助
解决Quarto与targets工作流的路径匹配问题
问题概述
我在targets工作流中使用R Markdown已有一段时间,现尝试迁移至Quarto文档,但过渡过程中遇到多个路径相关问题:
source()无法识别项目目录:R Markdown中可直接用source("packages.R")加载包脚本,但Quarto中执行会报错Error infile():! cannot open the connection,需改用source(here::here("packages.R"))才能渲染。tar_load()找不到项目根目录下的_targets文件夹,报错Error:! targets data store _targets not found. Utility functions like tar_read() and tar_load() require a pre-existing targets data store。tar_source()无法加载R文件夹中的自定义函数,需改为tar_source(files = here::here("R"))才能正常加载。
项目文件结构如下:
$ │ test_proj.Rproj | packages.R │ ├─ data │ mtcars.csv ├─ R | testing123.R └─ docs quarto.qmd markdown.rmd
核心需求:让Quarto文档像R Markdown一样默认使用项目根目录,无需将所有文件放入Quarto文档同目录,方便项目数据和函数管理(尤其是配合targets包时)。
解决方案
1. 配置Quarto工作目录为项目根
在Quarto文档(quarto.qmd)的YAML头部添加execute配置,指定工作目录为项目根目录:
--- title: "你的文档标题" execute: working-dir: ".." ---
这里的".."表示当前.qmd文件所在目录的上级目录(即项目根目录),配置后Quarto执行代码时会以项目根为工作目录,和R Markdown的默认行为完全一致。
2. 验证路径调用
配置完成后,即可直接使用原本R Markdown中的路径写法:
- 加载包脚本:
source("packages.R") - 加载targets对象:
tar_load(your_target_name) - 加载自定义函数:
tar_source("R")
3. 备选方案:全局绑定项目根(若配置失效)
如果working-dir配置未生效,可以在Quarto文档开头的代码块中用here包强制绑定项目根:
library(here) # 明确指定项目根为.Rproj文件所在路径 here::i_am("test_proj.Rproj")
之后所有路径调用无论是用here()包裹,还是直接使用相对路径,都会基于项目根目录。
关键原因
Quarto默认以当前.qmd文件所在目录为工作目录,而R Markdown默认以.Rproj对应的项目根为工作目录,这是两者路径行为差异的核心。通过配置working-dir可以统一工作目录,避免逐个修改路径的繁琐操作。
内容的提问来源于stack exchange,提问作者Morgan Browning
相关产品推荐
相关产品推荐

