MATLAB ワークスペースの使い方

8 ビュー (過去 30 日間)
晃平
晃平 2024 年 2 月 21 日
コメント済み: 晃平 2024 年 2 月 26 日
セル配列の変数と値をワークスペースに登録したいです。
data{1,1}:文字列変数 A,B,Cなど
data{1,2}:数値   1,2,3など
で、ワークスペースに
A=1
B=2
C=3
と登録したいです。

採用された回答

Tak
Tak 2024 年 2 月 21 日
編集済み: Tak 2024 年 2 月 21 日
以前の質問 でも回答しましたし、Dyuman Joshi さんのコメント にもありますように、このように変数を作成するのは好ましくありません。どうしてもワークスペースに作成する変数名と値を、セル配列で管理・指定する必要がある のであれば eval や assignin を使う必要があります。
どちらのドキュメントにも記載されていますが コードが分かりにくくなったり、予期しない結果が発生する可能性があります ので注意してください。
data の 1列目に変数名, 2列目にデータが格納されたセル配列とした場合。
data = {'A', 1;
'B', 2;
'C', 3}
eval でのワークスペースへの変数作成
以前の質問と違い、変数名ではなく格納する値を文字列に変換してMATLAB式にしますので、有効桁数には注意が必要です。
for n=1:height(data)
eval([data{n,1} '=' num2str(data{n,2}) ';'])
end
assignin でのワークスペースへの変数作成
assignin は、ワークスペースや変数名、値を指定して変数を作成します。セル配列の要素ごとに assignin を実行する必要がありますので、これには cellfun をあわせて使います。
ws = repmat({'base'}, height(data), 1);
var = data(:,1);
val = data(:,2);
cellfun(@assignin, ws, var, val)
セル配列から構造体 を作成する
今回のように 名前でアクセスしたい のであれば構造体が望ましいです。
既にセル配列に格納されている名前や値から構造体を作成するには cell2struct を使います。
s = cell2struct(data(:,2), data(:,1), 1)
構造体フィールドに各値が格納されますので s.A, s.B ... または s.('A'), s.('B') のように記述することでアクセスできます。
その他の方法としては、いまセル配列で管理・運用している変数名や値を、CSVやJSON形式ファイルなどの外部ファイルにすることが可能でしたら、外部ファイルからインポートして構造体やテーブルを作成することもできます。
  1 件のコメント
晃平
晃平 2024 年 2 月 26 日
ご回答ありがとうございます。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeビッグ データの処理 についてさらに検索

タグ

製品


リリース

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!