How to avoid evalin?

4 visualizaciones (últimos 30 días)
Adriano Filippo Inno
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.
  4 comentarios
Rik
Rik el 2 de Abr. de 2019
Feel free to forward this thread to the person who created this mat file. Or this thread.
Adriano Filippo Inno
Adriano Filippo Inno el 2 de Abr. de 2019
My professor did, so is better if I don’t!

Iniciar sesión para comentar.

Respuesta aceptada

Rik
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
Adriano Filippo Inno
Adriano Filippo Inno el 2 de Abr. de 2019
Thanks Rik, this exactly solves my problem! I didn’t know that load can save to a structure! Usually I use directly a structure as coding so I never encounter this problem.
Stephen23
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:

Iniciar sesión para comentar.

Más respuestas (0)

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by