将命令行中的参数传递给R降价文档

时间:2015-07-16 19:42:35

标签: r r-markdown

我从命令行通过以下方式运行降价报告:

R -e "rmarkdown::render('ReportUSV1.Rmd')"

此报告在R studio中完成,顶部看起来像

---
title: "My Title"
author: "My Name"
date: "July 14, 2015"
output: 
  html_document:
   css: ./css/customStyles.css
---


```{r, echo=FALSE, message=FALSE}

load(path\to\my\data)
```

我想要的是能够将标题和文件路径一起传递到shell命令中,以便它生成原始报告,结果是不同的filename.html。

谢谢!

1 个答案:

答案 0 :(得分:15)

有几种方法可以做到。

您可以在YAML中使用反引号-R块并在执行渲染之前指定变量:

---
title: "`r thetitle`"
author: "`r theauthor`"
date: "July 14, 2015"
---

foo bar.

然后:

R -e "thetitle='My title'; theauthor='me'; rmarkdown::render('test.rmd')"

或者您可以直接在RMD中使用commandArgs()并在--args之后将其输入:

---
title: "`r commandArgs(trailingOnly=T)[1]`"
author: "`r commandArgs(trailingOnly=T)[2]`"
date: "July 14, 2015"
---

foo bar.

然后:

 R -e "rmarkdown::render('test.rmd')" --args "thetitle" "me"

如果你命名为args R -e ... --args --name='the title',那么你的commandArgs(trailingOnly=T)[1]就是字符串“--name = foo” - 它不是很聪明。

在任何一种情况下,我猜你都想要某种错误检查/默认检查。我通常会编写一个编译脚本,例如

# compile.r
args <- commandArgs(trailingOnly=T)
# do some sort of processing/error checking
#  e.g. you could investigate the optparse/getopt packages which
#   allow for much more sophisticated arguments e.g. named ones.
thetitle <- ...
theauthor <- ...
rmarkdown::render('test.rmd')

然后运行R compile.r --args ...以我编写脚本要处理的格式提供参数。