MATLAB Answers

dandan
0

Apply function to all fields of a structure

Asked by dandan
on 6 Feb 2018
Latest activity Answered by Stuart McGarrity on 29 May 2018
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!

  0 Comments

Sign in to comment.

2 Answers

Answer by 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.

  0 Comments

Sign in to comment.


Answer by Stuart McGarrity on 29 May 2018

Take a look at structfun and arrayfun.

  0 Comments

Sign in to comment.