ファイル Tips 大全
ファイルの入出力について
encoding="" で指定できる文字コードは,
EUC-JP, SHIFT-JIS, UTF-8, UTF-16, ISO-2022-JP など
iconvの使える環境( capabilities() で確認できる )ならiconvlist()を実行してください
日本語を含む R ソースを,source("foo.R") などで読み込みたい場合,ソースの文字コードは UTF-8 で保存すべし。
そうしないと,身に覚えのない文法エラーを指摘されて,悩んでしまうかも。
デフォルトはOSの環境のエンコードに依存します。日本語環境ならWinはCP932(not Shift_JIS)でMac OS XはUTF-8,*nixは貴方次第,更に言えばsourceにもencoding引数があります。
特定の文字コードで sink するには,encoding= で指定する。EUC-JP とか SHIFT-JIS とか UTF-8 など。
f <- file("bar.tex", open="w", encoding="EUC-JP") sink(f) R ソースコード sink()
たとえば,日本語を含む SHIFT-JIS のファイルを FORTRAN 書式で読むときには,
f <- file("baz.tex", open="r", encoding="SHIFT-JIS") R ソースコード x <- read.fortran(f, c("2A6"))
そのようにしないと,
以下にエラーsubstr(text, first, last) : マルチバイト文字列が不正です
などという,身に覚えのないエラーメッセージをもらうことになるかも。
身に覚えが無いのなら私のバグかもしれませんし,変換不能な文字コード間のコンバートを行っている場合もあります,iconvの仕様も引きずりますし,OSのローケルも貧弱な事があります. ファイルのダンプや環境Sys.getlocale(),などお送り頂ければ調査しましょう.
結果を再現できる,なるべく小さなテスト材料を作りました。
まず,入力ファイル。encoding は SHIFT-JIS, 改行コードは CR/LF。
以下の3行を含む 石巻市 岩出山町 岩沼市 hexdump は以下の通り mac > hexdump work123 0000000 2020 90ce 8aaa 8e73 0d0a 8ae2 8f6f 8e52 0000010 92ac 0d0a 2020 8ae2 8fc0 8e73 0d0a
基本関数だけを使って検証しよう。
> read.table(file(description="work123",open="r")) 以下にエラーtype.convert(data[[i]], as.is = as.is[i], dec = dec, na.strings = character(0)) : マルチバイト文字列が不正です 指定すればちゃんと読める > read.table(file(description="work123",open="r",encoding="shift-jis")) V1 1 石巻市 2 岩出山町 3 岩沼市
環境の情報。ご推察通りMacintosh。 OS 10.4.3。R は 2.2.0。
> Sys.getlocale() [1] "ja_JP.UTF-8/ja_JP.UTF-8/ja_JP.UTF-8/C/ja_JP.UTF-8/ja_JP.UTF-8"
あらゆるエンコーディング間の変換を希望しているわけではないので,自動対応を望んでいるわけではないです。必要なときには必要な指定をすればよいので,別にどうってことない話ですので,いい加減にほっぽいといていただいておいてよいと思います。
だからこそ,tips でしょ(^_^;)