Rmd をコマンドでrender したい

rmarkdown を使っているとき、Rstudio ならknitr ボタン、コマンドならrender でRmd ファイルがコンパイルされる。
昔、同僚が「R を開かずにコマンドでrender したいすっね〜」って言っていたのでワンライナーで自作してあげたのだが、いまさらながら自分も欲しくなってきた。
というわけで作る。
.bashrc に関数を定義して、その関数の引数にknitr したいRmd を持ってきたらコンパイルされるようにする。
まず、Rmd を引き取ってrender してくれる関数をR で作るが、

a <- commandArgs()[2]
rmarkdown::render(a)
browseURL(gsub("Rmd", "html", a))

という感じにしておく。これはR のバッチモードというかワンライナーモードで、実際に処理したいRmd ファイルはR とその次にコマンド上、書かれるので、文字列を引き取ってrender する。
ついでにできたhtml をブラウザで開くようにする。これをセミコロン ; でつないで一行にしておく。
 
.bashrc では、ただalias を使うと引数をうまく処理できないらしいので、function で関数render を定義して、あとでalias で名付ける。

function render(){
  command R $1 -q -e 'library(rgl);a<-commandArgs()[2];rmarkdown::render(a);browseURL(gsub("Rmd", "html", a))'
}
alias render=render

 
実行は以下の通り。

render hogehoge.Rmd

Rmd にかかれている内容がRmd だけで完結するならばこれでよいが、いろいろ計算している場合にはそのオブジェクトが定義されているR でrender するほうが簡単だと思う。
自分はRmd のテンプレとして冒頭に

```{r eval=TRUE, echo=FALSE, warning=FALSE, message=FALSE, comment=""}
knitr::opts_chunk$set(echo=TRUE, eval=TRUE, warning=FALSE, message=FALSE, comment="",
out.height=480, out.width=480, fig.height=7, fig.width=7)
knitr::knit_hooks$set(rgl = hook_webgl)
# filetitle <- "filename"
# render(sprintf("%s.Rmd", filetitle)); browseURL(sprintf("%s.html", filetitle))
```

としておいて、filetitle だけ変えて# のところをコピペ実行すればそこそこ楽にファイルが生成される。