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

如何让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代码块中强制指定项目根:
    library(here)
    # 直接指定项目根路径
    set_here("/Users/Jobs/2023/project_x")
    
    或者用更通用的方式自动识别R项目根:
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:30:54