ファイル 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

特定の文字コードで 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) : マルチバイト文字列が不正です

などという,身に覚えのないエラーメッセージをもらうことになるかも。
身に覚えが無いのなら私のバグかもしれませんし,変換不能な文字コード間のコンバートを行っている場合もあります,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 でしょ(^_^;)


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-03-25 (土) 11:19:16