使用array2table
时尝试将VariableNames分配给表格列时出现错误:
Error using array2table (line 62)
The VariableNames property must be a cell
array, with each element containing one
nonempty string.
但是,只有在使用使用strcat
或sprintf
构建的单元格数组时才会出现此错误,例如:
for p=1:length(b)
string{p,:} = {strcat(a,num2str(b(p)))};
end
string =
{1x1 cell}
{1x1 cell}
{1x1 cell}
{1x1 cell}
然而,直接指定VariableNames:
T = array2table(ncoIED,'VariableNames',{'A' 'B' 'C' 'D'});
按预期工作。
这似乎与字符串存储在单元格数组中的方式有关 - 每个字符串都被' '
包围,而a = {'A' 'B' 'C' 'D'};
不会添加此字符串。
我需要能够通过连接多个变量来动态创建字符串名称 - 有没有一种方法可以与VariableNames参数兼容?
例如,如果我有两个单元格数组和一个数字矩阵,则采用以下形式:
g =
TT
uID =
3
4
5
10
s =
'CC'
'NN'
'AA'
我想按照这些规则创建12个唯一字符串:
TT3CC
TT3NN
TT3AA
TT4CC
TT4NN
TT4AA
TT5CC
TT5NN
TT5AA
TT10CC
TT10NN
TT10AA
可用于标记表格。
修改
第二组命名规则:
TT3NN
TT4NN
TT5NN
TT10NN
TT3CC
TT4CC
TT5CC
TT10CC
TT3AA
TT4AA
TT5AA
TT10AA
答案 0 :(得分:1)
类似的东西:
g = 'TT';
uID = [3 4 5 6];
s = {'CC' 'NN' 'AA'};
for i = 1:length(uID)
for j = 1:length(s)
names{(i-1)*length(s)+j} = strcat(g,int2str(uID(i)),s{j});
end
end
或
inc = 1;
for i = 1:length(uID)
for j = 1:length(s)
names{inc} = strcat(g,int2str(uID(i)),s{j});
inc = inc + 1;
end
end
您只需将所有变量转换为字符串。
从您可以编写的单元格中提取字符串:mycell{i}
。
最后strcat连接3个参数。
修改强>
对于你的第二个请求,它开始变得有点棘手:
sets = {[1:numel(uID)],[1:numel(s)]};
[p1 p2] = ndgrid(sets{:});
comb = sortrows([p1(:) p2(:)],2);
for i = 1:length(comb)
names{i} = strcat(g,int2str(uID(comb(i,1))),s{comb(i,2)});
end
我使用ndgrid生成所有可能的组合,然后根据第二行对组合数组进行排序。
你只需要改变你的细胞:
s = {' NN' ' CC' ' AA'}