在 for 循环中保存动态命名的变量
Posted
技术标签:
【中文标题】在 for 循环中保存动态命名的变量【英文标题】:Saving dynamically named variables in a for loop 【发布时间】:2018-01-25 22:13:52 【问题描述】:我有一个 2x2 的设计研究,我有超过 150 名参与者。所以我有 4 个不同的条件,我将它们命名为 11
、12
、21
、22
。
我需要使用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。
所以我的问题是,如何使用不同的名称保存每个参与者的值?
【问题讨论】:
您想将各种变量保存在 inside MATLAB(坏、非常坏)还是 outside MATLAB(很容易做到)? 为什么要为每个参与者创建一个变量,而不仅仅是包含矩阵中的所有内容。 (第 # 行是参与者 #)... @Adriaan 为什么在 matlab 中保存非常糟糕? @bla 如果我这样做,它会让我为每个参与者运行带有 demogrpahics 的 manova 吗?我还有很多变量,比如 pc,比如报价、响应、反应时间等...... @rvbarreto 请不要那样做。zeros(a)
将创建一个维度为 a-by-a 的方阵,这可能不是 OP 想要的。 总是在zeros
、ones
、nan
等中使用两个数字,例如zeros(150,1)
,以确保它最终是您真正想要的尺寸,而不是正方形并且比预期的要大得多。
【参考方案1】:
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 源的引用以获得更深入的解释。
【讨论】:
感谢您的回答和推荐!我打算在以不同方式保存每个变量后进行一些统计分析,但这似乎不是一个好主意 我将所有这些变量存储在一个结构中,当我需要访问它们时,我可以通过键入A.pc11(1,:)
来检索它们,但我无法使用它们运行 anova。 @Adriaan
@australopithecus 我不知道 anova 是什么或它是如何工作的,所以我无法帮助你。如果它在 MATLAB 内部:在 for
循环中插入并将每个 structfield 获取到一个临时变量,从而在将其插入 anova 之前将其从结构中取出。不要尝试动态保存所有 150 个变量,这只会弄乱脚本中的所有内容。
我要试试!非常感谢你!我是matlab的新手和学习者,但现在我可以看到我的问题的解决方案,感谢您的回答:)以上是关于在 for 循环中保存动态命名的变量的主要内容,如果未能解决你的问题,请参考以下文章