4

我正在 matlab 中制作一个程序,用于对我收集的一些生物医学数据进行数据分析。计算非常简单但重复,因此我对编写一个小程序很感兴趣。每位患者我有一个矩阵 (200 x 99),存储在一个带有患者姓名的变量中。我创建了一个函数,它产生一个输出变量(finalresult),其中包含我需要从这个病人矩阵中得到的一切。

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

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

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

=> 输出变量名总是finalresult

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

4

4 回答 4

1

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

function [ finalresult] = total_analysis( patientname)
    first = flexion(:,1)*2;
    second = first;
    finalresult.data = vertcat(first,second);
    finalresult.name = patientname;
end
于 2012-11-29T21:08:57.217 回答
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_th 个患者相关的所有变量。

于 2012-11-29T21:09:02.100 回答
1

这显然是糟糕的设计,但您可以使用evalin函数。类似于以下内容:

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

然后你调用你的函数myfunc而不分配它的输出。

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

适合小黑客而不是持久的代码。

于 2012-11-30T07:01:38.183 回答
0

除了您的评论,这里是使用 eval 动态命名工作区变量的示例:

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

patient1_finalresult =

   200
于 2012-11-29T21:46:56.417 回答