Apply function to all fields of a structure

조회 수: 47 (최근 30일)
dandan
dandan 2018년 2월 6일
답변: Stuart McGarrity 2018년 5월 29일
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!

답변 (2개)

James Tursa
James Tursa 2018년 2월 6일
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 2018년 5월 29일
Take a look at structfun and arrayfun.

카테고리

Help CenterFile Exchange에서 Structures에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by