How to assign a name to a Table given set of names?
Show older comments
Hi folks. I have a long code which runs every time with the number of items a set. For instance I have a set: Subjects = {Name1,Name2,Name3}. My FOR produces 3 different tables/matrixes: A, B and C. So each time the FOR statement runs, it overwrites the tables generated for each different subject. Is there a way to insert a code inside my FOR statement to store each table/matrix (A,B,C) and name each after the subject? For instance, something like this:
Subjects = {'Name1','Name2','Name3'}
for i=1:length(Subjects)
A = magic(2)
B = magic(3)
C = magic(4)
strcat('A_',Subjects(1)) = A % These were my best attempts, But It doesn't work.
strcat('B_',Subjects(2)) = B
strcat('C_',Subjects(3)) = C
end
% Any help much appreciated.
2 Comments
Adam
on 6 Apr 2016
I assume you mean matrices rather than tables. A table is now a specific data type in Matlab so it is useful to be as specific as you can with terminology. Your code suggests these are simply matrices though.
Use Adam's answer, it is the best solution to your problem.
Creating variables dynamically is a really bad way to code, which is explained in lots of threads on this forum:
Accepted Answer
More Answers (1)
Taking your current solution and making minimal changes, rather than starting from scratch...
Subjects = {'Name1','Name2','Name3'}
for i=1:numel(Subjects)
A.( Subjects{i} ) = magic(2)
B.( Subjects{i} ) = magic(3)
C.( Subjects{i} ) = magic(4)
end
will give you structs A, B and C with a field for each subject containing the relevant matrix.
You can then get hold of these fields using dynamic strings in the same way I do above.
Categories
Find more on Time Series Objects in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!