Dynamically assign structure names and loop them in fuction

4 visualizaciones (últimos 30 días)
George
George el 11 de Mzo. de 2015
Editada: Stephen23 el 12 de Sept. de 2023
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
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.

Iniciar sesión para comentar.

Respuesta aceptada

Stephen23
Stephen23 el 11 de Mzo. de 2015
Editada: Stephen23 el 12 de Sept. de 2023
  2 comentarios
George
George el 11 de Mzo. de 2015
I am using structures, the names are created by the structures loaded in a previous load sequence/generation. The structures themselves have inside them various data.I only use the dynamic naming so as to automate the loading.clearing processing process
Stephen23
Stephen23 el 12 de Mzo. de 2015
Editada: Stephen23 el 15 de Mzo. de 2015
Every time you use dynamically named variables you write a question here: "why is this difficult?", and the advice is "don't do this". Three times with the same problem and three times the same answer.

Iniciar sesión para comentar.

Más respuestas (1)

James Tursa
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.,

Categorías

Más información sobre Loops and Conditional Statements 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!

Translated by