如何在命令行带参数运行RMarkdown文件?
能否像运行R脚本一样给RMarkdown文件传递命令行参数?
我尝试在命令行终端运行名为myfile.Rmd的RMarkdown文件,该文件需要接收参数才能正常运行。以下为示例文件:
--- title: "Simple example" output: pdf_document: default ---
args = commandArgs(TRUE) VAR = args[1]
VAR
请问是否可以像运行R脚本那样,通过读取参数的方式运行该RMarkdown文件?注:并非采用读取输入文件的方式。
解决方案
当然可以!不过和直接运行普通R脚本的方式略有不同——RMarkdown文件本质是带代码块的标记文档,需要经过渲染步骤才能生成最终的PDF/HTML等输出,不能直接用Rscript myfile.Rmd执行。下面给你两种实用的实现方法:
方法1:直接通过rmarkdown::render传递参数
你可以在命令行中用Rscript调用rmarkdown::render函数,直接指定参数值:
Rscript -e "rmarkdown::render('myfile.Rmd', params = list(VAR = 'hello_world'))"
这种方式不需要修改你现有的Rmd文件代码,运行后会生成渲染好的PDF文档,其中VAR的值就是你传入的hello_world。
方法2:从命令行接收参数再传递给渲染函数
如果你希望像运行R脚本那样,把参数放在命令行末尾传递,可以用这个方式:
Rscript -e "args <- commandArgs(trailingOnly = TRUE); rmarkdown::render('myfile.Rmd', params = list(VAR = args[1]))" "你的参数值"
这里commandArgs(trailingOnly = TRUE)会读取命令行末尾的参数,再传递给render函数的params参数。
进阶优化:在YAML中定义参数(更规范的做法)
如果想让参数管理更清晰,推荐在Rmd的YAML头部定义params字段,这样可以设置默认值,也让代码更易读:
--- title: "Simple example" output: pdf_document: default params: VAR: "默认值" # 这里可以设置参数的默认值 ---
然后在代码块中直接调用params$VAR即可,不需要再用commandArgs:
params$VAR
对应的命令行运行方式和方法1一致:
Rscript -e "rmarkdown::render('myfile.Rmd', params = list(VAR = '自定义参数'))"
这样做的好处是,别人看你的Rmd文件时能一眼知道需要哪些参数,也支持在RStudio中手动指定参数预览,非常方便。
内容的提问来源于stack exchange,提问作者elcortegano
相关产品推荐
相关产品推荐

