メモ:Rのon.exitは関数の中じゃないと動かないっぽい
インデックスを生成するために、
- 一時的にindex.mdをつくる
- index.mdをknitしてHTMLを生成
- index.mdを削除
という処理をやりたくて、
md_tmp <- tempfile(tmpdir = ".", fileext = ".md") on.exit(file.dremove(md_tmp)) cat("foo", file = md_tmp) rmarkdown::render(md_tmp, output_file = "index.html")
みたいなスクリプトをRscriptで走らせればいいや、と思ってやってたら、この一時ファイルがまったく消えてくれなくて困った。正常終了でも異常終了でも消えない。
はじめはrender()
がなにか変なことしてるのかなーと思ってたけど、どうも、R自体が終了するときはon.exit()
は動かないっぽい。
こんな感じで関数で包んでやると動いた。
local({ md_tmp <- tempfile(tmpdir = ".", fileext = ".md") on.exit(file.dremove(md_tmp)) cat("foo", file = md_tmp) rmarkdown::render(md_tmp, output_file = "index.html") })