小技メモ(Rで日本語の扱い)

Rは結構柔軟な言語になっていて、日本語もそのまま使えたりします。

例えばこんな感じでオブジェクト名を日本語にすることもできます。


> あ <- 1:10
> あ
 [1]  1  2  3  4  5  6  7  8  9 10

「あ」というオブジェクトに1~10のベクトルを代入しています。

こんな感じでデータフレームの変数名も日本語に出来るのですが、調子に乗ってると痛い目に遭います。



実際に自分が痛い目を見たのですが、パッケージを作るときは日本語は受け付けません



日本語=不正なマルチバイト文字


です。



変数はアルファベットを使って指定し直せばいいのですが、例えば次のような時はどうしても日本語を使う必要があります。


  1. データに不正なマルチバイト文字が使われていて、パッケージの中で置換したい
  2. データ中の不正なマルチバイト文字で条件分岐させたい

これで私は詰まっていたのですが、twitterで@phosphor_mさんと@kos59125さんに相談に乗って頂いたおかげでなんとかなりました。

raw関数を使えば良くて、使用例は次のような感じです。


> as.numeric(charToRaw("あ"))
[1] 130 160
> rawToChar(as.raw(c(130, 160)))
[1] "あ"

このように、「あ」という文字列はRの中ではc(130, 160)というベクトルで認識されているようです。



もちろん次のような文字列もいけます。

> as.numeric(charToRaw("(´・ω・`) ショボーン"))
 [1]  40 129  76 129  69 131 214 129  69  96  41  32 131  86 131 135 131
[18] 123 129  91 131 147
> rawToChar(as.raw(c(40, 129,  76, 129,  69, 131, 214, 129,  69,  96, 
                    41,  32, 131,  86, 131, 135, 131, 123, 129,  91, 131, 147)))
[1] "(´・ω・`) ショボーン"
> 

これを利用することでパッケージ内で日本語を扱うことができました!

@phosphor_mさん、@kos59125さん、情報を下さってありあとうございます。



追記

この文字変換はSJIS環境でのコードなようです。

UTF-8環境では別の文字コードになるようでして、それはどこかにオプションを入れるのかな?

ページTOPへ