Dynamically assign structure names and loop them in fuction
    4 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 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!


