Main Content

Changes to DimensionNames Property in R2016b

The table data type is suitable for collecting column-oriented, heterogeneous data in a single container. Tables also contain metadata properties such as variable names, row names, dimension names, descriptions, and variable units. Starting in R2016b, you can use the dimension names to access table data and metadata using dot subscripting. To support that, the dimension names must satisfy the same requirements as the variable names. For backwards compatibility, tables enforce those restrictions by automatically modifying dimension names when needed.

Create a table that has row names and variable names.

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

Display its properties, including the dimension names. The default values of the dimension names are 'Row' and 'Variables'.

T.Properties
ans = 

  struct with fields:

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

Starting in R2016b, you can assign new names to the dimension names, and use them to access table data. Dimension names must be valid MATLAB® identifiers, and must not be one of the reserved names, 'Properties', 'RowNames', or 'VariableNames'.

Assign a new name to the first dimension name, and use it to access the row names of the table.

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

  5×1 cell array

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

Create a new table variable called Name. When you create the variable, the table modifies its first dimension name to prevent a conflict. The updated dimension name becomes 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'

Similarly, if you assign a dimension name that is not a valid MATLAB identifier, the name is modified.

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'

In R2016b, tables raise warnings when dimension names are not valid identifiers, or conflict with variable names or reserved names, so that you can continue to work with code and tables created with previous releases. If you encounter these warnings, it is recommended that you update your code to avoid them.