Rを日本語Windowsで使うときにアクセント付きのローマ字を扱う方法

概要
日本語WindowsでRを使う場合、アクセント付きのローマ字がうまく扱えないことがある。この場合、ロケールを変更すると扱えるようになる。

アクセント付きのローマ字がうまく扱えない事例

日本語Windowsで統計処理ソフトRを使う場合、アクセント付きのローマ字がうまく扱えないことがある。具体的に言うと、アクセント付きのローマ字を含む文字列を入力すると、アクセントがない形で出力されてしまう。以下の例では、”élève”というアクセント付きのローマ字を含む文字列を french という変数に代入している。french の中身を表示しようとすると、”élève”となることが期待されるのにもかかわらず、”eleve”となってしまう。

> french <- "élève"
> french
[1] "eleve"

もう1つ例を挙げよう。以下では、”über”という文字列を german という変数に代入して中身を表示しようとしている。すると、”uber”になってしまう。

> german <- "über"
> german
[1] "uber"

こうなってしまう理由は、日本語Windowsのデフォルトのロケールが、CP932 [1] であるためだ。CP932ではアクセント付きのローマ字がうまく扱えないのだ。

Rでどのようなロケールが使われているか調べるためには、Sys.getlocale という函数を使う。CP932が使われている環境では、以下のようにロケールが表示されるはずだ。

> Sys.getlocale()
[1] "LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932"

ロケールの変更

ロケールを変更するとこの問題を回避することができる。ここでは、以下のように Sys.setlocale 函数を使ってロケールを変更する [2] 。すると、アクセント付きのローマ字がうまく表示されるようになる。

> Sys.setlocale(locale="C")
[1] "C"
> french <- "élève"
> french
[1] "élève"
> german <- "über"
> german
[1] "über"

なお、もしロケールをCP932に戻したければ、以下のように入力しよう。

> Sys.setlocale(locale="Japanese_Japan.932")
[1] "LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932"

結論

アクセント付きのローマ字がうまく扱えないのは、日本語WindowsがCP932をデフォルトとしていることが原因である。上で述べたように、R上でロケールを変更すればなんとかアクセント付きのローマ字が扱えるようになる。ただ、ロケールを変更したらしたで問題が発生する可能性もある。

だから、R上でロケールをいじるよりも、最初からアクセント付きのローマ字がうまく扱えるMacやLinuxを使う方がよほど楽だと思う。

アクセント付きのローマ字をうまく扱いたかったら、Windowsでなく、MacやLinuxを使おう。

脚注
  1. ささいな違いはあるが、実質的にShift_JISと考えて良い。 []
  2. ロケールについて詳しい人なら、Sys.setlocale(locale=”ja_JP.UTF-8″) と入力すべきと考えるかもしれない。だが、これではうまくいかなかった。 []