У меня есть структура («данные») с 26 полями (A, B, C, D и т. Д. c.). Каждое поле содержит 1x30 ячеек (по одной для каждого участника), а каждая ячейка содержит структуру. Я хотел бы извлечь все структуры (т.е. одну структуру на поле), соответствующие каждому участнику. То есть я хотел бы получить 30 новых «данных», каждое из которых содержит 26 полей, а каждое поле содержит структуру 1x1, причем структура соответствует участнику. Я пробовал следующий код:
data = load('D:\filepath\mydata.mat'); %load file with data. 1x1 struct.
all_fields = fieldnames(data); %store the fields of the structure. 26x1 cell.
forStr = length(all_fields); %26
n_ppts = 30; %total number of participants.
%for each participant, extract the corresponding structure in each field.
for nn = 1:n_ppts
for idx_field = 1:forStr
name_field = all_fields{idx_field};
data2 = data;
data2.(name_field) = data.(name_field){nn};
end
%save the 'data' for each participant. The 'data' should include 26 fields, and 1 structure for each field.
name = ppt_fname(nn); %Generate the new name for saving
savename =string(regexprep(name,'_oldname.set','_newname.mat'));
save(savename, '-struct', 'data');
end
Код не дает никакой ошибки. Тем не менее, это не работает, как я ожидал. «data2» по-прежнему содержит 26 полей, но только последнее поле содержит 1 структуру, соответствующую участнику. Другие поля содержат ячейку 1x30. Я думаю, это потому, что каждый раз, когда я запускаю l oop, он перезаписывает предыдущие поля, оставляя только последнее поле правильным. Итак, я думаю, что мне может понадобиться временная переменная для хранения каждой итерации l oop.
Я думал создать временное хранилище для каждого поля
structure = [];
namelist = {‘A’;’B’;’C’;’D’;’E’;’F’;’G’;’H’;’I’;’J’;’K’;’L’;’M’;’N’;’O’;’P’;’Q’;’R’;’S’;’T’;’U’;’V’;’W’;’X’;’Y’;’Z’};
for i = 1:length(namelist)
structure.(namelist{i})={};
end
Но не могу выяснить, как заставить это работать.