根据matlab中的输入变量名创建唯一的输出变量名

时间:2012-11-29 20:46:18

标签: matlab input unique octave output

我正在matlab中编写一个程序,用于我收集的一些生物统计数据的数据分析。计算非常简单但重复,因此我有兴趣编写一个小程序。我每个患者有一个基质(200 x 99),存储在一个带有患者姓名的变量中。我创建了一个函数,该函数生成一个输出变量(finalresult),其中包含我需要从此patiënts矩阵中获取的所有内容。

我真的希望这个输出变量带有输入变量的名称。这样我就可以单独为每个患者调用该函数,然后在工作区中收集变量列表,而不必在每次函数调用后手动更改输出变量的名称。

我希望你明白我想要达到的目标。这是我的代码的简化示例:

function [ finalresult] = total_analysis( patientname)
    first = patientname(:,1)*2;
    second = first;
    finalresult = vertcat(first,second);
end

=>输出变量名称始终为 finalresult

但我希望它是一个“唯一的其他”输出变量名,最好是finalresult_patientname或patientname

4 个答案:

答案 0 :(得分:1)

为什么不返回带结果和患者姓名的结构?

function [ finalresult] = total_analysis( patientname)
    first = flexion(:,1)*2;
    second = first;
    finalresult.data = vertcat(first,second);
    finalresult.name = patientname;
end

答案 1 :(得分:1)

我建议在matlab中使用一个结构数组,将所有数据存储在一个变量中:

    s(1).name    = 'Jane';                      % Store patient's name here as a string
    s(1).data    = janesData;                   % Store patient's data
    s(1).result  = total_analysis( s(1).data )  % Store the analyzed data

    s(2).name    = 'John';                      % Store patient's name here as a string
    s(2).data    = johnsData;                   % Store patient's data
    s(2).result  = total_analysis( s(2).data )  % Store the analyze

等等所有患者的数据。然后你可以简单地使用s(i)来获得与第i个患者相关的所有变量。

答案 2 :(得分:1)

这显然是糟糕的设计,但您可以使用evalin功能。如下所示:

cmd = sprintf('result_%s = %f', suffix, result);
evalin('caller', cmd);

然后在不指定输出的情况下调用函数myfunc

同样,这不是一个好主意,因为大多数用户不会期望这种行为。函数应该返回结果,同时让调用者将结果分配给他选择的任何变量。

适用于小型黑客,而不适用于持久的代码。

答案 3 :(得分:0)

在您的评论之后,这是使用eval动态命名工作区变量的示例:

>> string = 'patient1';
>> eval(strcat(string, '_finalresult = 200'))

patient1_finalresult =

   200
相关问题