How to avoid evalin?

2 次查看(过去 30 天)
Adriano Filippo Inno
评论: Stephen23 2019-4-2
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 个评论
Rik
Rik 2019-4-2
Feel free to forward this thread to the person who created this mat file. Or this thread.
Adriano Filippo Inno
My professor did, so is better if I don’t!

请先登录,再进行评论。

采纳的回答

Rik
Rik 2019-4-2
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 个评论
Adriano Filippo Inno
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 2019-4-2
" I didn’t know that load can save to a structure! "
The load documentation explains all of the different load syntaxes:

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Variables 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by