如何在R项目中将Rmarkdown文件编织到指定目录且不改变工作目录
解决Rmd编织输出到指定目录且保持工作目录不变的问题
针对你的项目结构:
a_folder/ ├─ a_project.Rproj ├─ program/ │ ├─ data_summary.rmd │ └─ data_summary.html └─ report/
你之前的YAML方法会导致工作目录切换到program/,核心原因是rmarkdown::render默认会将工作目录切换到Rmd文件所在路径。要解决这个问题,只需在render函数中指定knit_root_dir参数,强制保持工作目录为项目根目录即可。
方法一:修改Rmd的YAML头部
将原有的knit函数替换为以下代码,同时确保项目根目录被正确识别:
knit: (function(inputFile, encoding) { rmarkdown::render( input = inputFile, encoding = encoding, output_dir = file.path(dirname(inputFile), "../report"), knit_root_dir = rprojroot::find_rstudio_project() ) })
output_dir:通过dirname(inputFile)获取Rmd所在的program/目录,再用../report定位到项目根目录下的report文件夹,保证输出路径正确。knit_root_dir:借助rprojroot包自动识别RStudio项目的根目录,确保编织过程中工作目录始终保持在a_folder/。
如果你的环境中没有安装rprojroot包,先运行install.packages("rprojroot")安装即可。
方法二:直接在R控制台执行编织命令
如果不想修改Rmd文件,也可以在项目根目录的R控制台中直接运行以下命令:
rmarkdown::render( input = "program/data_summary.rmd", output_dir = "report", knit_root_dir = getwd() )
getwd()会获取当前项目根目录的路径,作为编织时的工作目录,避免切换到program/。
这两种方法都能让data_summary.html输出到report/目录,同时保持工作目录始终为项目根目录a_folder/。
内容的提问来源于stack exchange,提问作者Izzy_oz3
相关产品推荐
相关产品推荐

