MATLAB: How to load saved workspace in a custom named variable

anti-patterndatadynamic variable namesevalfor loopinefficientloadsaveslowstringstructstructures

Hello,
this is what i am currently doing:
for i=1:length(A)
[y1,y2] = myfun(x,A)
savefile = ['test_'num2str(A(i)) '_and_' num2str(x) '.mat'] ;
save(savefile)
end
so i am currently saving all the workspace to a custom .mat file. Now i need to load those workspaces but i need to load them into struct variables that have the same name of the .mat file because i have a lot of data to work with. I tried with these:
for i=1:length(A)
['test_'num2str(A(i)) '_and_' num2str(x)] = load(['test_'num2str(A(i)) '_and_' num2str(x) '.mat']);
end
but it says: "Error: Assigning the function output to this expression is not supported."
how can i fix these problem?

Best Answer

The efficient approach is to use indexing (rather than anti-pattern dynamic variable names):
It is easy to import the file data into one cell array or one structure, e.g. the same one that dir returns:
D = 'absolute or relative path to the folder where the files are saved';
S = dir(fullfile(D,'*mat'));
for k = 1:numel(S)
F = fullfile(D,S(k).name);
S(k).data = load(F);
end
and then you can simply access the data from every file using basic and very efficient indexing, e.g. the third file:
S(3).name
S(3).data
If all of your .mat files contain variables with the same names (which is good data design) then you can also un-nest them by concatenating the data structures them into one non-scalar structure, e.g.:
out = [S.data]
out(3).someVariable
out(3).otherThing