我有一个如下代码。我想生成一个包含所有文件名的数组,并与我从每个文件中收集的数据相结合。
DataCC = dir('*-CC.xls'); %select the file type
MeanAreaCC=[];
PlateNameCC=[];
for w = 1: numel(DataCC)
basefilenamedata=DataCC(w).name; %extract the file name
T=readtable(basefilenamedata); %read table in
PlateNameCC=[PlateNameCC basefilenamedata]; %generate the file name array
MeanAreaCC = [MeanAreaCC mean(T.Area)]; %generate the data array
end
x=array2table([PlateNameCC, transpose(MeanAreaCC)],'VariableNames',{'Iso-Condi-Rep','MeanAreaCC'}); %combine two arrays just generated
writetable(x,fullfile(DataFolder,'DataSummary.xls'),'Sheet',1,'Range','A1');
但我的代码不起作用,因为PlateNameCC
是作为一个字符而不是数组生成的。当我将PlateNameCC
与MeanAreaCC
合并时,会出现错误,抱怨不同的数组大小。有人可以帮我查一下吗?谢谢!
答案 0 :(得分:0)
这里有一些问题。
首先,PlateNameCC = [PlateNameCC basefilenamedata];
将创建一个长字符串的垃圾。
例如:
fnames = dir('*.m')
namelist = [];
for ii = 1:numel(fnames)
namelist = [namelist fnames(ii).name]
end
给我:
namelist =
'SOcode.mcallbacksclass.mtestcode.m'
您想使用string array或cell array:
fnames = dir('*.m');
namelist1 = string({fnames.name});
namelist2 = {fnames.name};
返回:
namelist1 =
1×3 string array
"SOcode.m" "callbacksclass.m" "testcode.m"
namelist2 =
1×3 cell array
{'SOcode.m'} {'callbacksclass.m'} {'testcode.m'}
其次,当您只使用table
构造函数本身时,尝试连接两个(非常)不同的数组来创建表是没有意义的:
fnames = dir('*.m');
namelist = string({fnames.name});
data = [1, 2, 3];
T = table(namelist.', data.');
给出了:
T =
3×2 table
Var1 Var2
__________________ ____
"SOcode.m" 1
"callbacksclass.m" 2
"testcode.m" 3