How to avoid evalin?
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Adriano Filippo Inno
el 2 de Abr. de 2019
Comentada: Stephen23
el 2 de Abr. de 2019
I have a .mat file that contains a large set of vectors. Let's say var1, var2,....varN
I need to use these vectors in a for loop. Here's what I did:
load('GivenFile.mat')
% no other variables saved
Names = who;
N = length(Names);
for i = 1:N
TempVar = evalin('base',Names{i});
...
end
I know that evalin should be avoided so I tried to save the workspace in a structure in order to do:
Tempvar = SavedWorkspace.Names{i}
But I'm not able to save the workspace as a structure.
Respuesta aceptada
Rik
el 2 de Abr. de 2019
You can solve it this time by loading into a struct:
S=load('GivenFile.mat');
fn=fieldnames(S);
for n=1:numel(fn)
tempVar=S.(fn{n});
%some useful code:
%...
end
But I second John's suggestion to put it all into a single variable.
As a final remark: always load into a struct, it makes it obvious where variables are coming from, which helps with debugging and future editing.
2 comentarios
Stephen23
el 2 de Abr. de 2019
" I didn’t know that load can save to a structure! "
The load documentation explains all of the different load syntaxes:
Más respuestas (0)
Ver también
Categorías
Más información sobre Variables en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!