如何在运行c.Rmd时自动执行外部a.Rmd与b.Rmd文件?
自动在c.Rmd中执行前置.Rmd文件的解决方案
当然可以搞定!在R Markdown里,你完全不用每次手动跑a.Rmd和b.Rmd,只要在c.Rmd里加几行代码就能自动触发前置文件的执行。这里有两种实用的实现方式:
方法一:直接用rmarkdown::render()函数
这是最直接的方案,R Markdown自带的render()函数就是用来渲染.Rmd文件的。你只需要在c.Rmd的开头代码块里加入以下内容:
# 先执行a.Rmd rmarkdown::render("a.Rmd") # 再执行b.Rmd rmarkdown::render("b.Rmd")
几个实用细节:
- 如果a.Rmd/b.Rmd不在当前工作目录,记得写相对路径或者绝对路径,比如文件在
scripts子文件夹里,就写成rmarkdown::render("scripts/a.Rmd") - 要是想指定输出文件的位置和格式,可以加
output_file参数,比如把a.Rmd的输出放到outputs文件夹里:rmarkdown::render("a.Rmd", output_file = "../outputs/a_result.html") - 如果你的前置.Rmd需要传入参数(比如指定数据路径、年份),可以用
params参数传递:rmarkdown::render("a.Rmd", params = list(data_path = "data/raw_data.csv", report_year = 2024))
方法二:封装成自定义execute()函数(更贴合你的需求)
如果你希望代码像你示例里那样简洁,可以自己封装一个execute()函数,用法完全符合你的预期:
# 定义自定义执行函数 execute <- function(rmd_file) { rmarkdown::render(rmd_file) } # 调用函数执行前置文件 execute("a.Rmd") execute("b.Rmd")
这样写出来的代码就和你想要的execute(a.Rmd)格式一模一样,看起来更清爽。
额外小提示
- 如果你不想让前置.Rmd的输出文件乱放在当前目录,可以用
output_dir参数指定单独的输出文件夹,比如rmarkdown::render("a.Rmd", output_dir = "outputs") - 要是前置.Rmd运行时会生成中间数据(比如处理好的数据集),一定要确保这些数据的保存路径能被c.Rmd正确读取,避免出现找不到文件的错误。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

