使用array2table +创建连接字符串时分配VariableNames时出错

时间:2015-09-02 13:47:55

标签: string matlab

使用array2table时尝试将VariableNames分配给表格列时出现错误:

Error using array2table (line 62)
The VariableNames property must be a cell
array, with each element containing one
nonempty string.

但是,只有在使用使用strcatsprintf构建的单元格数组时才会出现此错误,例如:

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

1 个答案:

答案 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'}