R Markdown/Knitr自定义输出目录时出现无法打开连接错误
解决R Markdown指定output_dir后source文件找不到的问题
问题核心原因
当你在rmarkdown::render中指定output_dir参数时,渲染过程会临时将工作目录切换到输出目录下。此时脚本中使用的相对路径(比如source("02-Scripts/03-LogMod-6-plot.R"))会以输出目录为基准查找文件,自然找不到项目根目录下的02-Scripts文件夹,从而触发文件无法打开的报错。
解决方案
方案一:用here包定位项目文件(推荐)
here包会自动识别R项目的根目录,不受工作目录切换影响,能准确定位所有文件。
- 安装并加载here包:
# 首次使用先安装 # install.packages("here") library(here)
- 修改脚本中的source语句:
source(here("02-Scripts", "03-LogMod-6-plot.R"), local = knitr::knit_global())
方案二:修改knit函数固定工作目录
在YAML的knit函数中,指定knit_root_dir为原Rmd文件所在的目录,确保渲染时始终以项目根目录为基准查找文件:
--- title: 'MyTitle' subtitle: 'Analysis XYZ' author: "Boris et al." date: "2023-01-22" knit: (function(input, encoding) { input_dir <- dirname(input) rmarkdown::render(input, encoding = "UTF-8", output_dir = file.path(input_dir, "05-Reports"), knit_root_dir = input_dir) }) output: pdf_document ---
修改后,脚本中的source语句保持原有相对路径即可正常工作。
验证
两种方案都能确保渲染时正确找到02-Scripts下的脚本,同时将生成的PDF文件保存到05-Reports目录中。
内容的提问来源于stack exchange,提问作者boris
相关产品推荐
相关产品推荐

