Writing tables within a for loop

1 vue (au cours des 30 derniers jours)
Carly
Carly le 28 Jan 2025
Modifié(e) : dpb le 30 Jan 2025
Hi all,
I'm trying to make a for loop to process some EEG data. The final output is (1x96) for each participant which is finally working great, however, now I'm having issues writing the data/ looping through the participants. I've attached what the output looks like for one particpant as that is how far I can get. Below is what I'm trying to use unnsuccessfully. Any help is greatly appreciated!
SubjectNum = { '01-02' '01-03' };
resultsFileName = [fullfile(baseDir, 'MATLAB_Output', 'DIVINE.75results.xlsx')];
for k = 1:length(SubjectNum)
.... (whole bunch of steps)
RelativePowerResults = table(ID,channelsLabel,relativeDelta2,relativeTheta2,relativeAlpha2,relativeBeta2,relativeGamma2)
% unstack resulting in (1 row with 96 columns)
RelativePowerResults_Wide = unstack(RelativePowerResults,"relative"+["Alpha2","Delta2","Theta2","Beta2","Gamma2"],'channelsLabel');
if k == 1
% First subject, with variable names
writetable(RelativePowerResults_Wide, resultsFileName, 'Sheet', 1, 'Range', RANGE{k});
else
% For subsequent subjects, write without variable names
writetable(RelativePowerResults_Wide, resultsFileName, 'Sheet', 1, 'Range',RANGE{k}, 'WriteVariableNames', false);
end

Réponses (1)

Walter Roberson
Walter Roberson le 28 Jan 2025
Déplacé(e) : Walter Roberson le 29 Jan 2025
Instead of worrying about the Range arguement, consider the possibility of using 'WriteMode', 'append' which will automatically put the new data at the bottom of all previous data.
  2 commentaires
Carly
Carly le 29 Jan 2025
Déplacé(e) : Walter Roberson le 29 Jan 2025
Hi Walter,
Thanks! I changed it to this based on your advice and it works now!
if nSubject == 1
% First subject, with variable names
writetable(RelativePowerResults_Wide,'Sheet',1,resultsFileName);
else
% For subsequent subjects, write without variable names
writetable(RelativePowerResults_Wide, resultsFileName, 'Sheet', 1,'WriteMode','append', 'WriteVariableNames',false);
dpb
dpb le 29 Jan 2025
Modifié(e) : dpb le 30 Jan 2025
Could cut down code a little by
writetable(RelativePowerResults_Wide,resultsFileName,'Sheet',1,'WriteMode','append', ...
'WriteVariableNames',nSubject==1)
to generate the logic value on the fly instead.
But, the 'WriteMode','append' flag automagically writes the variable names to an empty sheet and then doesn't write the variable names if there are existing data on the sheet so it's superfluous to add it, anyway, and the single form suffices for both first and subsequent writes.
writetable(RelativePowerResults_Wide,resultsFileName,'Sheet',1,'WriteMode','append')

Connectez-vous pour commenter.

Catégories

En savoir plus sur EEG/MEG/ECoG dans Help Center et File Exchange

Produits


Version

R2024b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by