R-Markdown:具有相对路径的输入和输出

我正在开发一个由我们的团队开发的项目.我们在存储库中共享代码.每个团队成员都在使用他/她自己的机器和他/她自己的工作目录.这就是我们在项目中使用相对路径的原因.通常我们使用类似的东西

setwd("MyUser/MyProject/MyWD/myCodesDir") # local
...
MyReportingPath <- "../ReportsDir" # in repository

现在我尝试向此目录呈现降价报告:

rmarkdown::render(input = "relevantPath/ReportingHTML.Rmd",
                output_file = paste0(MyReportingPath, "/ReportingHTML.html"))

这不起作用.只有输入输出文件的完整路径(“/home/User/…./ReportingHTML.html”)才有效
这是我想澄清的问题之一:是否有可能以任何方式使用相对路径进行Markdown?

第二个问题是如果我输入output_file中的一个不存在的目录,pandoc会抛出一个错误,而不是用我的输出文件创建这个目录.是否有可能创建动态输出目录? (在渲染之前做系统(paste0(“mkdir”,reportPath),intern = T)除外)

附:对我来说,在单独的R函数中渲染markdown文档非常重要,我将创建由Markdown文档继承的整个环境.

最佳答案 琐碎的问题 – 因为你使用的是paste0,你需要在输出目录和输出文件之间提供/分隔符.

你写了:

rmarkdown::render(input = "relevantPath/ReportingHTML.Rmd",
            output_file = paste0(MyReportingPath, "ReportingHTML.html"))

相反,尝试:

rmarkdown::render(input = "relevantPath/ReportingHTML.Rmd",
            output_file = paste0(MyReportingPath, "/", "ReportingHTML.html"))

更广泛地:

对于你的第一个问题(设置输入文件的路径) – 我也建议在这里使用:: here().如果您需要从工作目录向上导航,可以按如下方式分解路径:

parent_dir <- paste(head(unlist(strsplit(here::here(), "/", fixed = TRUE)), -1), collapse = "/")
grandparent_dir <- paste(head(unlist(strsplit(here::here(), "/", fixed = TRUE)), -2), collapse = "/")

但是 – 将工作目录设置为更高级别可能更容易,然后构建代码和结果目录,例如:

project_dir <- here::here()
codefile <- paste(project_dir, "code", "myreport.Rmd", sep = "/")
outfile <- paste(project_dir, "results", "myreport.html", sep = "/")
rmarkdown::render(input = codefile,
            output_file = outfile))

对于第二个问题(创建输出目录) – 使用dir.create(“MyReportingPath”,recursive = TRUE)将创建输出目录和任何中间级别.如果存在可以使用showWarnings = FALSE抑制的目录,您将收到警告.

点赞