在for循环中保存动态命名的变量

时间:2018-01-25 22:13:52

标签: matlab for-loop save

我有2x2设计研究,我有超过150名参与者。所以我有4种不同的条件,我将它们命名为11122122

我需要将所有单元格值转换为cell2mat的矩阵,并且需要为每个参与者执行此操作。我正在尝试编写一个for循环,为每个参与者设置不同的值,但我无法弄清楚如何去做。

 %% each participant records

%conditions are = 11 , 12 , 21, 22
%participants 1:101 (p1,p2,p3.....p150)

for i = 1:150
%personal control (pc)
p_pc11= cell2mat(A.pc11(i,:));
p_pc12= cell2mat(A.pc12(i,:));
p_pc21= cell2mat(A.pc21(i,:));
p_pc22= cell2mat(A.pc22(i,:));

 save('p?_pc11' , p1_pc11)

end

它应该是这样的,但我不知道如何以不同方式保存每个变量。我试过了p(i)_pc11 , p'i'_pc11,但却出错了。我需要为每个参与者提供一个唯一的变量。我将它们保留在结构中,但它不适合运行anova或manova。

所以我的问题是,如何用不同的名字保存每个参与者的价值?

1 个答案:

答案 0 :(得分:2)

for ii = 1:150
%personal control (pc)
p_pc11= cell2mat(A.pc11(ii,:));
p_pc12= cell2mat(A.pc12(ii,:));
p_pc21= cell2mat(A.pc21(ii,:));
p_pc22= cell2mat(A.pc22(ii,:));

% Generate numbered filenames
filename11 = sprintf('p_pc11_%d',ii);
filename12 = sprintf('p_pc12_%d',ii);
filename21 = sprintf('p_pc21_%d',ii);
filename22 = sprintf('p_pc22_%d',ii);

% Save them with the numbered name
save(filename11 , p_pc11)
save(filename12 , p_pc12)
save(filename21 , p_pc21)
save(filename22 , p_pc22)

end

使用sprintf生成编号的文件名,然后保存。请注意,我将循环索引从i更改为ii,更改为i is the imaginary unit

请注意,在MATLAB中使用带编号的变量名称或实际上任何类型的动态命名变量对于性能和可读性非常非常糟糕,因此调试,问题,请参阅this answer of mine以及对MathWorks源代码的引用其中包含更深入的解释。