Dynamically assign structure names and loop them in fuction
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
George
el 11 de Mzo. de 2015
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 comentario
Stephen23
el 11 de Mzo. de 2015
Editada: Stephen23
el 11 de Mzo. de 2015
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.
Respuesta aceptada
Más respuestas (1)
James Tursa
el 11 de Mzo. de 2015
Editada: James Tursa
el 11 de Mzo. de 2015
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 comentarios
Ver también
Categorías
Más información sobre Whos en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!