変数名の一部をリストから抽出できないです

19 vues (au cours des 30 derniers jours)
悠真 松本
悠真 松本 le 6 Juil 2021
Commenté : 悠真 松本 le 7 Juil 2021
list = ["a", "b"];
X = [1 2 3 4 5 6 ];
strcat("TF_", list(1,1)) = cumsum(X);
と言うように変数名の一部をlist(string型)から取り出して使いたいのですが、string型は変数に設定できないので、以下のコードを試しました。
str2num(strcat("TF_", list(1,1)))= cumsum(X)
これでも同じく「string型の値をインデックスとして使用できません。」となってしまいます。どうすればできるようになるでしょうか?

Réponse acceptée

Atsushi Ueno
Atsushi Ueno le 6 Juil 2021
list = ['a', 'b'];
X = [1 2 3 4 5 6 ];
eval(['TF_' list(1,1) '= cumsum(X);']);
のようにchar型文字とeval関数を使えば実現しますが、これは推奨されない方法です。英語で同じ質問をしたら、百戦錬磨のMATLABフリーク各位から電光石火のスピードで「プログラム内で動的な名前を作るんじゃない!!!」と怒られます。
関数 eval の代替方法 - MATLAB & Simulink - MathWorks 日本 :最初にあるセル配列を用いる例です
numArrays = 6;
TF = cell(numArrays,1);
for n = 1:numArrays
TF{n} = cumsum(X);
end
  4 commentaires
Atsushi Ueno
Atsushi Ueno le 6 Juil 2021
目下の課題(TF_aやTF_b等の名前を繰り返し処理で作成する)の達成の為ならevalを使えば良いかもしれませんが、引き続きプログラム中でTF_aやTF_b等の名前を使うにはやはりevalを使う必要があり、eval縛りから抜け出せなくなります。また、実行速度の低下、可読性の低下、デバッグのし難さなど欠点を上げればキリが有りません。マクロの多用と似ていて、他の言語でも同じ事が言えます。
悠真 松本
悠真 松本 le 7 Juil 2021
なるほど、そういうことでしたか。今後何のプログラムを書くにしても気を付けます。ありがとうございます。

Connectez-vous pour commenter.

Plus de réponses (0)

Produits


Version

R2021a

Community Treasure Hunt

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

Start Hunting!