複数ファイルを一度に処理

knitrを使ってドキュメント生成をしている。ひとつのトピックにつきひとつの.Rmdファイルを作るので、ディレクトリ内に多くの.Rmdファイルができてしまう。それらをひとつづつHTMLに変換していくのは面倒なので、一括処理を行うための簡単なスクリプトを書いた。

library(knitr)
library(markdown)

files <- list.files(pattern="Rmd$")
for (filename in files) {
  mdfile <- knit(input=filename)
  markdownToHTML(file=mdfile, output=sub("Rmd", "html", filename),
    stylesheet="./style.css")
  file.remove(mdfile)
}

ディレクトリ内のファイルのうち、ファイル名が「Rmd」で終わるものだけをfilesという変数に入れ、for文でひとつずつ処理をしていく。

同様のスクリプトMatlabではいくつも書いたことがあるのだけどRでは初めてだったので、ファイル名をいじるところで戸惑ってしまった。結局、hoge.Rmdをhoge.htmlに変換するのには正規表現(sub)を使った。途中でできるMarkdownファイルはちゃんと削除(file.remove)。なんだかMatlabより簡単だったかも。