日付を曜日に変換するのに日本語環境と英語環境で罠にハマった話

Rの日付に関する関数で、

format(Sys.Date(), "%a")

とすると、日本語環境ならば

[1] "月"

これをR Shiny で使おうと思っていたら、shiny のサーバーは英語環境なので、デフォルトでは日月火水木金土が出てこず、英語表記のSun Mon... になってしまって罠にハマった。
環境を英語にしようと

Sys.setenv(LANG="en")

にしてみるが、これではうまく行かない。

困っていたら弟子に教えてもらったが

temp <- Sys.getlocale(category="LC_TIME")
Sys.setlocale(category="LC_TIME", "C")
format(Sys.Date(), "%a")
Sys.setlocale(category="LC_TIME", temp)
[1] "C"
[1] "Mon"
[1] "ja_JP.UTF-8"

となり、英語化はうまくいった。

英語から日本語化は環境設定的にうまくいくのか確かめにくいので、面倒ではあるが、曜日番号を%u(月火水木金土日が1-7)もしくは%w(月火水木金土が1-6で、日が0)にして、月火水木金土日のオブジェクトを作って変換したほうが無難かもしれない。