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.
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{:});