Apply function to all fields of a structure

16 views (last 30 days)
Say I have a structure with a bunch of fields, and I would like to add a subfield to each field with the mean of its values, such as:
structure(1).field1.mean = mean(structure(1).field1.values);
But I'd like to do this for all elements in the structure (i.e., structure(:)) and for many fields (i.e., structure.field1, structure.field2, structure.field3, etc.), sort of like a wildcard call.
The best I've come up with so far is a double for loop with dynamic field names:
fieldnames={'field1' 'field2' 'field3'};
for i=1:length(structure)
for j=1:length(fieldnames)
structure(i).(fieldnames{j}).mean = mean(structure(i).(fieldnames{j}).values);
end
end
But this seems sloppy... Is there a way to do this without for loops? Thanks!

Answers (2)

James Tursa
James Tursa on 6 Feb 2018
What you have is likely the best way to do this. Since there will need to be a loop of some sort to do this anyway (even if it is in the background of a function call), may as well just write it out like you have since it is easy to read and understand what is happening.

Stuart McGarrity
Stuart McGarrity on 29 May 2018
Take a look at structfun and arrayfun.

Categories

Find more on Structures in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!