我正在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
答案 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