Main Content

R2016b 中对 DimensionNames 属性的更改

table 数据类型适用于将列向异构数据收集到单个容器中。表还包含元数据属性,例如变量名称、行名称、维度名称、说明和变量单位。从 R2016b 开始,您可以使用维度名称通过圆点下标来访问表数据和元数据。要支持该功能,维度名称必须满足与变量名称相同的要求。为实现向后兼容,表会在需要时通过自动修改维度名称来强制执行这些限制。

创建一个包含行名称和变量名称的表。

Number = [8; 21; 13; 20; 11];
Name = {'Van Buren'; 'Arthur'; 'Fillmore'; 'Garfield'; 'Polk'};
Party = categorical({'Democratic'; 'Republican'; 'Whig'; 'Republican'; 'Republican'});
T = table(Number,Party,'RowNames',Name)
T = 

                 Number      Party   
                 ______    __________

    Van Buren     8        Democratic
    Arthur       21        Republican
    Fillmore     13        Whig      
    Garfield     20        Republican
    Polk         11        Republican

显示其属性,包括维度名称。维度名称的默认值为 'Row''Variables'

T.Properties
ans = 

  struct with fields:

             Description: ''
                UserData: []
          DimensionNames: {'Row'  'Variables'}
           VariableNames: {'Number'  'Party'}
    VariableDescriptions: {}
           VariableUnits: {}
                RowNames: {5×1 cell}

从 R2016b 开始,您可以为维度名称分配新名称,并使用它们访问表数据。维度名称必须是有效的 MATLAB® 标识符,并且不能是保留名称 'Properties''RowNames''VariableNames' 之一。

为第一个维度名称分配一个新名称,并使用它访问表的行名称。

T.Properties.DimensionNames{1} = 'Name';
T.Name
ans =

  5×1 cell array

    'Van Buren'
    'Arthur'
    'Fillmore'
    'Garfield'
    'Polk'

新建一个称为 Name 的表变量。当您创建该变量时,表会修改其第一个维度名称以防止冲突。更新后的维度名称将变为 Name_1

T{:,'Name'} = {'Martin'; 'Chester'; 'Millard'; 'James'; 'James'}
Warning: DimensionNames property was modified to avoid conflicting dimension and variable names: 
 'Name'. See Compatibility Considerations for Using Tables for more details. This will become an  
error in a future release. 

T = 

                 Number      Party         Name   
                 ______    __________    _________

    Van Buren     8        Democratic    'Martin' 
    Arthur       21        Republican    'Chester'
    Fillmore     13        Whig          'Millard'
    Garfield     20        Republican    'James'  
    Polk         11        Republican    'James'  
T.Properties.DimensionNames
ans =

  1×2 cell array

    'Name_1'    'Data'

同样地,如果您分配的维度名称不是有效的 MATLAB 标识符,该名称也会被修改。

T.Properties.DimensionNames{1} = 'Last Name';
T.Properties.DimensionNames
Warning: DimensionNames property was modified to make the name 'Last Name' a valid MATLAB
identifier. See Compatibility Considerations for Using Tables for more details. This will  
become an error in a future release. 

ans =

  1×2 cell array

    'LastName'    'Data'

在 R2016b 中,当维度名称不是有效的标识符或者与变量名称或保留名称冲突时,表将会发出警告,您可以继续处理用早期版本创建的代码和表。如果您遇到这些警告,建议您对代码进行更新以避免出现这些警告。