如何让here()函数在R Markdown/Quarto中正常工作?
Quarto调用R脚本时
here()根目录异常的问题解答 这是预期行为吗?
是预期行为。here()的核心逻辑是从当前工作目录向上遍历,寻找带有项目标记的目录(比如包含.Rproj、.git、.here文件的目录)作为根目录:
- 直接运行脚本时,R的工作目录默认是R项目根目录(打开
.Rproj文件时自动设置),因此here()会正确识别到/Users/Jobs/2023/project_x。 - 从Quarto文件调用脚本时,Quarto默认以
.qmd所在目录为工作目录,here()会从这个位置向上查找标记文件。如果/Users/Jobs/2023/project_x/Analysis/code目录下存在项目标记文件(比如误创建的.Rproj),或者上层的项目根标记未被正确识别,就会导致here()把该目录当作根。
解决办法
- 清理冗余的项目标记文件:检查
/Users/Jobs/2023/project_x/Analysis/code目录,删除其中可能存在的.Rproj、.here等标记文件,确保只有项目根目录/Users/Jobs/2023/project_x下有这些标记。 - 在Quarto中显式设置项目根:在
.qmd开头的R代码块中强制指定项目根:
或者用更通用的方式自动识别R项目根:library(here) # 直接指定项目根路径 set_here("/Users/Jobs/2023/project_x")library(here) library(rprojroot) proj_root <- find_root(is_rstudio_project) set_here(proj_root) - 设置Quarto的工作目录:在
.qmd的YAML头部添加工作目录配置,直接指定项目根:--- title: "你的文档标题" working-directory: "/Users/Jobs/2023/project_x" --- - 调用脚本时使用项目根相对路径:确保在Quarto中调用脚本时,用
here()生成正确的脚本路径:source(here("Analysis/code/rmd/你的脚本文件名.R"))
内容的提问来源于stack exchange,提问作者LucaS
相关产品推荐
相关产品推荐

