我是MATLAB的初学者,我希望在这个漂亮的网站上找到帮助(再次:))。 它是关于一系列个体的模型预测结果。因此,我有一系列的 变量(包含每个个体的基本结果)以及它们的命名法不同 仅在第一部分..e,g:
Mike结果保存为:Mike_Sim_V_software1 Adam结果保存为:Adam_Sim_V_sofwtare1 Sarah结果保存为:Sarah_Sim_V_sofwtare1 等等...
我已经有了名单['Mike','Adam','Sarah'等]和ID(保存在名为:idx的变量中的%)
因为我想要执行一系列类似于上述所有变量(结果变量)的计算, 由于我的变量名称仅在第一部分有所不同,我想到编写一个这样的循环函数:
for idx=1:80
x= Indi_All {idx,1} (1,1)
% idx: is the Individual IDs ... 80 is the total number of individuals
% Indi_All is a cell array containing the basic info, IDs and demographics..
here x will get the initial part of the variables names e.g. 'Mike' or 'Adam'
Indi_Results {idx,1} = x
Indi_Results {idx,2} = prctile (x_Sim_V_software1', (5))
Indi_Results {idx,2} = x_5P_software1'
Indi_Results {idx,3} = prctile (x_Sim_V_software1', (10))
Indi_Results {idx,3} = x_10P_software1'
Indi_Results {idx,4} = prctile (x_Sim_V_software1', (25))
Indi_Results {idx,4} = x_25P_software1'
Indi_Results {idx,5} = prctile (x_Sim_V_software1', [50])
Indi_Results {idx,5} = x_Median_software1'
Indi_Results {idx,6} = prctile (x_Sim_V_software1', (75))
Indi_Results {idx,6} = x_75P_software1'
Indi_Results {idx,7} = prctile (x_Sim_V_software1', (90))
Indi_Results {idx,7} = x_90P_software1'
Indi_Results {idx,8} = prctile (x_Sim_V_software1', [95])
Indi_Results {idx,8} = x_95P_software1'
% the code and calculations go even more and more ...
end
因此专家可以看到... x将在代码(右列)中被识别为'x'而不是我实际想要它的意思,即变量x包含字符串值,如:'迈克'..
我的问题是:
1)我可以解决这个问题吗?是否有任何函数可以从两个不同的字符串构造变量的名称?所以也许类似于num2str,但要将字符串添加到字符串! 换句话说,要将变化部分'Mike','Adam'等添加到不变的部分'_Sim_V_software1'以获取我可以在循环函数中使用的变量?!
我不知道......我觉得我的问题很愚蠢,但不知怎的,我花了很多时间来做这件事,并没有像我希望的那样工作! 希望这与我的头脑已经知道周末即将开始的事实无关:)
我很高兴听到你的意见并提前多多感谢...!
答案 0 :(得分:2)
实际上很简单。您需要使用eval()
函数,如下所示:
Indi_Results {idx,1} = eval(x)
Indi_Results {idx,2} = prctile (eval([x '_Sim_V_software1'])', (5))
Indi_Results {idx,2} = eval([x '_5P_software1'])'
...
对于字符串连接,您可以使用[str1 str2],如上所示。
问候
答案 1 :(得分:1)
使用eval
是可能的,但可能没有必要。
相反,我建议您将文件读入单元格数组。然后通过索引到数组中来操作它们。例如,
fn = {'Mike','Adam','Sarah'};
for i=1:length(fn)
% use the functional form of the load() function
% to get the time series into t{i} regardless of the filename.
t{i} = load([fn '_Sim_V_software1 ']);
res(i, :) = prctile (t{i}, [5 10 25 50 75 90 95]);
end
在上面的示例中,您并不需要t{}
的单元格数组,但我假设您需要对时间序列进行更多分析。