在另一个表中添加表时,MATLAB错误“您不能仅使用一个下标错误下标表”

时间:2014-12-07 17:53:14

标签: matlab

作为一个例子,我将以表格 PEOPLE 的形式提供数据集:

phone      name           address
_____      ____    ____________________
                   country city  street
                   _____   ____  ______
1111       "A"     "C1"    "CI1" "STR1"
2222       "B"     "C1"    "CI2" "STR2"
3333       "A"     "C3"    "CI3" "STR3"
4444       "C"     "C2"    "CI4" "STR4"
...        ...     ...     ...   ...

正如您所看到的那样(此处 A )可以有多个电话号码,每个电话号码都绑定到不同的地址(为简单起见,我们排除了同一地址可能有两个电话号码)。

我想创建一个结构数组 PERSON ,其中包含以下字段:

  • name:person的名称( PEOPLE 中的第二列)
  • 数据:包含 name 指定的人员

    所有电话号码和地址( PEOPLE 中的第一和第三列)的表格
      PERSON
        |----name (single value)
        |----data--* (table)
                   |----phone
                   |----address--*
                                 |--country
                                 |--city
                                 |--street
    

正如您所看到的那样,原始数据的结构在很大程度上得到了保留,唯一的例外是提取人名并将其添加到 PERSON 结构的另一个字段中。

我的问题来自第三栏地址使用Matlab R2014a ):

Error using table/subsrefDot (line 117)
You can not subscript a table using only one subscript. Table
subscripting requires both row and variable subscripts.

Error in table/subsref (line 62)
[varargout{1:nargout}] = subsrefDot(t,s);

我的代码是(不是最佳的,仍在学习:)):

% main script
...
% extract unique names
PEOPLE_UNIQUE = unique (PEOPLE.name,'stable');
personList = []
for person = 1:size(PEOPLE_UNIQUE)
  personList = [personList, createNewPerson(PEOPLE_UNIQUE(person,:).name, PEOPLE)];
end

% function file createNewPerson.m
function PERSON = createNewPerson(name, dataset)
  personData = table(dataset.phone(strcmp(dataset.name,name)),dataTable.address(strcmp(dataset.name,name)),'VariableNames',{'phone','address'});
  userprofile = struct('name',name,'data', personData);  
end

我确定问题来自地址,因为我已经测试过创建一个 PERSON 结构,其中包含多个其他非复杂(如在包含子列中)的单元格,并且&#39工作。


修改

我刚刚发现,在构建存储在 PERSON 中的新表格时,反汇编地址并重新组合它

personData = table(dataset.phone(strcmp(dataset.name,name)),table(dataTable.address.country(strcmp(dataset.name,name)),dataTable.address.city(strcmp(dataset.name,name)),dataTable.address.street(strcmp(dataset.name,name)),'VariableNames',{'country','city','street'}),'VariableNames',{'phone','address'});

然而,这太乏味了,我不敢想象Matlab无法在表格中插入表格。如果您可以给我一个快捷方式,我不必剖析地址,然后再次绑定相同的数据,我真的很感激。

0 个答案:

没有答案