COLOR(RED){SIZE(30){ファイル Tips 大全}} ファイルの入出力について #contents ~ *文字コード encoding="" で指定できる文字コードは, EUC-JP, SHIFT-JIS, UTF-8, UTF-16, ISO-2022-JP など COLOR(RED){iconvの使える環境( capabilities() で確認できる )ならiconvlist()を実行してください} *ソースファイルの文字コード 日本語を含む R ソースを,source("foo.R") などで読み込みたい場合,ソースの文字コードは UTF-8 で保存すべし。~ そうしないと,身に覚えのない文法エラーを指摘されて,悩んでしまうかも。 ~ COLOR(RED){デフォルトはOSの環境のエンコードに依存します。日本語環境ならWinはCP932(not Shift_JIS)でMac OS XはUTF-8,*nixは貴方次第,更に言えばsourceにもencoding引数があります。} *特定の文字コードで sink 特定の文字コードで sink するには,encoding= で指定する。EUC-JP とか SHIFT-JIS とか UTF-8 など。 f <- file("bar.tex", open="w", encoding="EUC-JP") sink(f) R ソースコード sink() *特定の文字コードのファイルを read たとえば,日本語を含む SHIFT-JIS のファイルを FORTRAN 書式で読むときには, f <- file("baz.tex", open="r", encoding="SHIFT-JIS") R ソースコード x <- read.fortran(f, c("2A6")) そのようにしないと, 以下にエラーsubstr(text, first, last) : マルチバイト文字列が不正です などという,身に覚えのないエラーメッセージをもらうことになるかも。 ~ COLOR(RED){身に覚えが無いのなら私のバグかもしれませんし,変換不能な文字コード間のコンバートを行っている場合もあります,iconvの仕様も引きずりますし,OSのローケルも貧弱な事があります. ファイルのダンプや環境Sys.getlocale(),などお送り頂ければ調査しましょう.}~ ~ COLOR(BLUE){結果を再現できる,なるべく小さなテスト材料を作りました。}~ まず,入力ファイル。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" COLOR(RED){あらゆるエンコーディング間の変換を希望しているわけではないので,自動対応を望んでいるわけではないです。必要なときには必要な指定をすればよいので,別に同ってことない話ですので,いい加減にほっぽいといていただいておいてよいと思います。}~ COLOR(RED){あらゆるエンコーディング間の変換を希望しているわけではないので,自動対応を望んでいるわけではないです。必要なときには必要な指定をすればよいので,別にどうってことない話ですので,いい加減にほっぽいといていただいておいてよいと思います。}~ COLOR(RED){だからこそ,tips でしょ(^_^;)}