matlabsynchronizetimetable

Synchronize timetables stored in a structure


I am dynamically storing data from different data recorders in timetables, nested in a structure DATA, such as DATA.Motor (timetable with motor data), DATA.Actuators (timetable with actuators data) and so on.

My objective is to have a function that synchronizes and merges these timetables so I can work with one big timetable.

I am trying to use synchronize to merge and synchronize those timetables:

fields = fieldnames(DATA);    
TT = synchronize(DATA.(fields{1:end}));

but get the following error:

Expected one output from a curly brace or dot indexing expression, but there were 3 results. 

This confuses me because DATA.(fields{1}) return the timetable of the first field name of the DATA structure.

Any thought on how I can solve this is greatly appreciated.


Solution

  • The problem here is that fields{1:end} is returning a "comma-separated list", and you're not allowed to use one of those as a struct dot-index expression. I.e. it's as if you tried the following, which is not legal:

    DATA.('Motor','Actuators')
    

    One way to fix this is to pull out the values from DATA into a cell array, and then you can use {:} indexing to generate the comma-separated list as input to synchronize, like this:

    DATA = struct('Motor', timetable(datetime, rand), ...
                  'Actuators', timetable(datetime, rand));
    DATA_c = struct2cell(DATA);
    TT = synchronize(DATA_c{:});