How to change the name of variables using a loop?

I need to do the same matrix calculations repeatedly, but I want to rename the variable within the loop. e.g. I need matrices R_1 R_2 R_3 R_4. I want to be able to set matrix R_1=( calcs for ii=1); R_2=( calcs for ii=2), etc. I know I can convert ii to a string using num2str(ii), but how do I concatenate that to R? R_ii=(calcs for ii)?
Am I going to need some sort of cell array to do that? I'm trying to avoid cells.

3 Comments

Don't avoid cell arrays. They are just what you need in this kind of situation... except perhaps when a struct would be better.
Are all those variables the same size? If so then just store them in an array:
for ii = 1:n
your_mat(:,ii) = something;
end
José-Luis: good point. This should include array preallocation though:
for ii = n:-1:1
your_mat(:,ii) = something;
end

Sign in to comment.

 Accepted Answer

Stephen23
Stephen23 on 25 Sep 2014
Edited: Stephen23 on 25 Sep 2014
In MATLAB it is (almost always) better to not create variable names on the fly:
Use a cell or struct instead.
I know you were looking for a tidy solution... this is the tidy solution.

More Answers (2)

Cells ARE the way to go.
Structures would be preferable to what you want
mystruct.description = 'blah blah';
mystruct = setfield(mystruct,['R_' num2str(ii) ], values);
However, sometimes, in rare cases, not using a monolithic storage solution is the only practical option. This option should be avoided whenever possible.
eval(['R_' num2str(ii) ' = values;']);
Hi Kathleen,
why do you want to avoid cells? They are a perfect fit - and much cleaner/safer/easier to use than any clumsy and error prone variable creation based on names and indices ...?
Titus

Categories

Asked:

on 25 Sep 2014

Edited:

on 10 Oct 2014

Community Treasure Hunt

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

Start Hunting!