Octaveで2次元行列のデータを.csvなどのテキストファイルに書き出す関数です。Rで読みこみやすい形式のテキストファイルに書き出したかったのですが,Octaveのcsvwriteやdlmwriteでは微妙に融通がきかないので,自作しました。MATLABだとwritetableがいい感じなのですが,Octaveにはないみたいです。
そういうわけで,単に数値を書き出すだけではなく,Rで読み取りやすい感じに整形できるようなオプション機能をつけています。たとえば,
Data = [
1 1 16
2 1 18
3 2 11
4 2 9
5 1 21
6 2 14
]
のような行列を,
被験者,条件,正答数 Subject1,Experimental,16 Subject2,Experimental,18 Subject3,Control,11 Subject4,Control,9 Subject5,Experimental,21 Subject6,Control,14
といった形式のテキストファイルに書き出すこともできます。
Octave on UbuntuとOctave on Windows環境で確認しています。MATLAB on Windowsでも簡単に確認しています。MacOSではわかりません。古いOctaveやMATLABでは動作しないかもしれません。
関数のヘルプを下に貼り付けておきます。
% WriteCsv: 2次元行列データをテキストファイルに書き出し
%
% [Report,DataCell] = WriteCsv(FileName,Data,Delim,Levels,ColNames,Comment,[options])
%
% Report ファイルに何も書き出さなければ0を、新規ファイルに書き出
% したら1を、既存ファイルを置き換えたら2を、既存ファイルに
% 書き足したら3を出力します。
% DataCell Data の内容をセル配列に置き換えたものが出力されます。
% Levels が指定されていると、水準名に置き換えられています。
%
% FileName 出力先のファイル名(e.g., 'Data.csv')。省略不可。
% Data データ(2次元行列)。省略不可。
% Delim 区切り文字。タブは'\t'と指定して下さい。省略可。省略時は
% ','が使われます。
% Levels 水準名の一覧(セル配列)。省略可。
% ColNames Dataの各列の名称。冒頭の行にこの内容を出力します。省略可。
% Comment コメント(文字列)。1行目にそのまま出力されます。省略可。
%
% 以下のオプションを指定できます(省略可):
% '-overwrite' ファイル上書きの確認をせず、強制的に上書きします。
% '-append' 既存のファイルの後に書き足します。
% '-unix' 改行コードに LF を用います(Unix, MacOSX向け)。
% '-win' 改行コードに CR+LF を用います(Windows向け)。
% '-mac' 改行コードに CR を用います(MacOS9向け)。
%
% 2次元行列のデータ Data をテキストファイルに書き出します。たとえば、1列
% 目に要因1の水準、2列目に要因2の水準、3列目に測定値を記した下のようなデ
% ータを考えます。
%
% Data = [
% 1 1 337.1
% 1 1 460.2
% 1 1 390.0
% 1 2 561.9
% 1 2 884.8
% 1 3 409.8
% 1 3 552.9
% 2 1 294.2
% 2 1 711.0
% 2 1 551.8
% 2 2 580.2
% 2 2 609.5
% 2 3 442.4
% 2 3 493.1
% ];
%
% これに対して、 WriteCsv('Data.csv',Data) を実行すると、下のような内容
% のテキストファイル Data.csv が出力されます。
%
% 1,1,337.100000
% 1,1,460.200000
% (中略)
% 2,3,493.100000
%
% 区切り文字は Delim で指定できます。WriteCsv('Data.txt',Data,';')
% とすれば
%
% 1;1;337.100000
% 1;1;460.200000
% (中略)
% 2;3;493.100000
%
% のようになります。タブは '\t' と指定して下さい。Delim が省略されるとカ
% ンマが使われます。
%
% 引数 Levels で水準名の一覧を与えると、数値を水準名に置き換えられます。
% Levels はセル配列です。Levels{N} は、Data のN列目に対応する水準名のセ
% ル配列です。たとえば次のように水準名を指定します。
%
% Levels{1} = {'F','M'} % 要因1の水準名
% Levels{2} = {'教示A','教示B','統制条件'} % 要因2の水準名
%
% これで WriteCsv('Data.txt',Data,[],Levels) とすれば下のようになります。
%
% F,教示A,337.100000
% F,教示A,460.200000
% (中略)
% M,統制条件,493.100000
%
% Data のうち、Levels で置き換える列の値は、自然数でなければなりません。
% 要因2だけ水準名に置き換え、要因1は置き換えない場合、Levels{1} に空 []
% を指定してください。
%
% Levelsで、水準名の一覧のかわりに '%n' を含む文字列を1つだけ指定すると、
% '%n' が Data 中の数値に置き換わった文字列を出力します。これは、被験者
% 番号を 'Subject1' のような文字列に置き換える場合に便利です。たとえば、
%
% Levels{1} = {'Subject%n'} % 被験者番号
% Levels{2} = {'教示A','教示B','統制条件'} % 要因の水準名
%
% とすると、下のような結果になります。
%
% Subject1,教示A,337.100000
% Subject1,教示A,460.200000
% (中略)
% Subject2,統制条件,493.100000
%
% ColNames で列に見出しをつけられます。ColNames はセル配列です。たとえば
%
% ColNames = {'性別','教示','反応時間(ms)'}
%
% として、WriteCsv('Data.txt',Data,[],[],ColNames) とすれば、
%
% 性別,教示,反応時間(ms)
% 1,1,337.100000
% 1,1,460.200000
% (中略)
% 2,3,493.100000
%
% のように、冒頭に見出しが加わります。見出しをつけたくない列に対しては、
% 空を指定して下さい。下の例では、2列目に見出しをつけません。
%
% ColNames = {'性別','','反応時間(ms)'}
%
% Comment に文字列を指定すると、その内容が1行目に出力されます。たとえば
%
% Comment = '# Experiment 1, 2015/09/01'
%
% として、WriteCsv('Data.txt',Data,[],[],[],Comment) とすれば、
%
% # Experiment 1, 2015/09/01
% 1,1,337.100000
% 1,1,460.200000
% (中略)
% 2,3,493.100000
%
% のように、1行目にコメントが追加されます。'-append' が指定されている場
% 合、Comment や ColNames は書き足し部分の最初に出力されます。
%
% FileName で指定されたファイルがすでに存在する場合、上書きしてよいか確
% 認を求めます。y を入力すれば上書きし、n を入力すれば上書きせずに終了し
% ます。オプション '-overwrite' を指定すると、この確認をしません。
%
% オプションは'-'で始まる文字列で指定します。指定する順序は任意です。
%
% '-overwrite' ファイルの上書き確認をせず、強制的に上書きします。
% '-append' FileNameで指定されたファイルが存在すれば、書き足します。
% ファイルが存在しなければ、新規にファイルを作成します。
%
% 改行コードを指定するには以下のオプションを使います(文字コードの変換は
% 行ないません)。下のいずれも指定しないと、LF が用いられます。
%
% '-unix' 改行コードに LF を用います(Unix, Mac OSX向け)。
% '-win' 改行コードに CR+LF を用います。これは、出力されたファイ
% ルをWindowsのメモ帳で開く場合などに便利です。
% '-mac' 改行コードに CR を用います(Mac OS9向け)。
%
% (2015/09/15 by R Niimi. Tested with Octave 3.2.4 on Ubuntu 12.04 32bit)
UTF-8版(Ubuntu用) [Version 2015/09/15]
ShiftJIS版(Windows用) [Version 2015/09/15]