动态更改变量名称

3
我有一个循环计算多个条件下的均值(m)、标准差(std)和标准误差(sem)。由于每个条件都有自己的mstdsem,我想要相应地对输出进行命名(它们应该是双精度格式)。例如:cond1_mcond1_stdcond1_semcond2_mcond2_stdcond2_sem等。
这是我尝试过的代码:
    cond={'cond1','cond2','cond3','cond4','cond5',...}
    for a=1:length(cond) 
        [strcat(cond{a},'_m'),strcat(cond{a},'_std'),strcat(cond{a},'_sem')]=compute_stats(M(:,a));
    end

注意:compute_stats 是输出 mstdsem 的函数。 M 是包含我的数据的矩阵。问题在于,strcat 似乎不能作为更改输出名称的方法。例如,在第一次迭代中,我的输出应该是 cond1_m,但实际上我的输出是一个名为 strcat 的矩阵。
有人能帮忙吗?

请不要在Matlab中使用eval(http://stackoverflow.com/questions/32467029/how-to-put-these-images-together)。我建议使用具有动态字段名称的结构体,语法为`condstruc.([num2str(a), '_m'])`等。 - Andras Deak -- Слава Україні
1个回答

7
考虑使用结构体,这非常适合您的目的。顺便提醒一下,请勿将cond用作变量名。因为有一个名为cond的函数可计算矩阵的条件数。在此情况下使用cond会掩盖此函数。您可以保留cond1cond2等字段不变。
con={'cond1','cond2','cond3','cond4','cond5',...};
result = struct();
for a=1:numel(con)
    [m, stdd, sem] = compute_stats(M(:,a));
    result.([con{a} '_m']) = m;
    result.([con{a} '_std']) = stdd;
    result.([con{a} '_sem']) = sem;
end

result 包含您期望得到的编译结果,然后您可以通过正确的字符串名称来访问相应的矩阵。例如,如果您想要第一个条件的 std 输出,请执行以下操作:

out = result.cond1_std;

谢谢。我确实尝试使用结构体,但坚持使用strcat(即result.(strcat(cond{a},'_m')),显然这并不起作用。 - A.Rainer
@A.Rainer Ah :). 确保你用[]封装字符串,否则在动态创建结构体字段时它不能工作。 - rayryeng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接