How to avoid evalin?
조회 수: 6 (최근 30일)
이전 댓글 표시
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.
채택된 답변
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
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개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!