Dynamically assign structure names and loop them in fuction
5 ビュー (過去 30 日間)
古いコメントを表示
Hello
I am trying to dynamically assign some of my variable names which are structures and them pass them through a script although I get an error
DATA=who('DATA*')
ORIG=who('ORIGINAL*')
countS=length(DATA)
countC=length(ORIG)
if countS==countC;
for i=1:countS
figure
scatter(DATA{i,1}.H,ORIGINAL{i,1}.H)
lm(i)=polyval(DATA{i,1}.H,ORIGINAL{i,1}.H)
end
end
Though i get Attempt to reference field of non-structure array. The structures themselves contain fields that i want to iterate through other processes, am I doing something wrong?
thanks
1 件のコメント
Stephen23
2015 年 3 月 11 日
編集済み: Stephen23
2015 年 3 月 11 日
Do not use dynamically names variables in MATLAB. Put your variables in a cell array instead.
The answers will explain why, and please understand them if you want to write good code.
This is the third time that you have asked a question that used dynamically named variables and faced a difficult problem because of that choice: each time the advice given was "do not use dynamically named variables", and reasons were given.
その他の回答 (1 件)
James Tursa
2015 年 3 月 11 日
編集済み: James Tursa
2015 年 3 月 11 日
The result of the who command simply gives you variable names as a cell array of strings ... it doesn't give you the variables themselves. Thus, DATA{i,1} is a string that is the name of a variable ... it is not the variable itself so you can't use .H syntax to get at the H field. You will probably need to use something like eval to get at the variable. E.g.,
scatter(eval([DATA{i,1} '.H']),eval([ORIGINAL{i,1} '.H']))
lm(i) = polyval(eval(DATA{i,1} '.H']),eval([ORIGINAL{i,1} '.H']));
This is admittedly ugly, but that is typically what you end up with when you have a multitude of variables in your workspace with similar names that you need to loop over. A better practice is often to have such variables gathered up into a single cell array instead. This makes accessing them in a loop much easier, and allows the use of MATLAB functions that operate on cell arrays (often avoiding loops altogether). E.g.,
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Whos についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!