はじめに
データ解析に役立つ MATLAB ですが、ここではまずデータにアクセスするための下準備について見ていきましょう。**例えば、複数人で同じ PC の MATLAB を使う場合、前の人が使った環境が残ってるとやっかいですよね?自分には関係ないフォルダにアクセスしちゃう、同じ名前の知らない関数呼ばれちゃう、なんてことありますよね。**そこで、使う人ごとに環境を用意してしまおう、というのがメインです。
バージョン
MATLAB (R2019b) のみ!
結論から
- 必要なフォルダに前もってパスを通し、終了時にキレイさっぱりが理想!
- パス関連のコマンドについて、使い方を覚えておくと便利!
- addpath で通したパスは、MATLAB セッションが切れると削除される!
想定している環境
フォルダ構成はこんな感じです。F1 ~ F3 が自由にアクセスしたいフォルダです。F3 にはサブフォルダ F3_sub があります。また、.m の関数はパスを設定するプログラムになります。
#フォルダが既知で、数が少ない場合
今回みたいに、フォルダが事前に分かっていて、数が少ない場合はこんな感じ。
function addTESTpath
% addTESTpath.m が置かれているフォルダ
rootDir = fileparts(mfilename('fullpath'));
% パスに追加するフォルダのリスト
path_temp = {};
path_temp{end+1} = rootDir;
path_temp{end+1} = fullfile(rootDir,'F1');
path_temp{end+1} = fullfile(rootDir,'F2');
path_temp{end+1} = fullfile(rootDir,'F3');
path_temp{end+1} = fullfile(rootDir,'F3', 'F3_sub');
% パスへ追加
addpath(path_temp{:},'-end');
1行目は、addTESTpath.m が置かれているフォルダのパスが出てきます。
rootDir = fileparts(mfilename('fullpath'));
そこがルートフォルダになるので、その下にあるフォルダを追加していくイメージです。最後に addpath を使用して終わり。パスの優先順位を下げたい場合に、-end オプションを使用します。
addpath(path_temp{:},'-end');
ポイントは、この addpath で通したパス。今のセッションだけ有効です。 MATLABを再起動すれば、この情報は消えています。つまり、次使う人にとって余分な情報は残りません!
#フォルダが未知、もしくは既知でも数が多い場合
上記みたいに、1つずつ指定するのは...サブフォルダまで知らないし...と感じたら自動化してみましょう。
function addTESTpath_auto
% addTESTpath_auto.m が置かれているフォルダ
rootDir = fileparts(mfilename('fullpath'));
% パスに追加するフォルダのリスト(フォルダだけ抽出)
flist = dir(rootDir);
flist = flist(~ismember({flist.name}, { '..'}));
flist = flist([flist.isdir]);
% パスに追加するフォルダのリスト
flist_full = arrayfun(@(x) genpath(x.name),flist,'UniformOutput',false);
% パスへ追加
addpath(flist_full{:},'-end');
フォルダ情報や構成は、dir や genpath を組み合わせてみました。
結果
参考情報
- [サブフォルダ名の取得時に.や..を除く方法について教えてください]
(https://jp.mathworks.com/matlabcentral/answers/382376-)
- [【MATLAB】パス設定に関する"基礎"知識]
(https://qiita.com/eigs/items/96697bd372cd45508ff1) - [dirでファイルだけ取り出したい!]
(https://qiita.com/ginger893/items/0e2cd95cca71e8f5a7f4)