S = fieldfun(fun,S1,...,SN)
passes the values for each field in structures S1,...,SN
to function fun
and returns the result in scalar structure S
. Each field F
in S
, i.e. S.(F)
, is the result of fun(S1.(F),...,SN.(F))
.
fieldfun
allows the organization of data by structure and field name while allowing the data to be easily processed according to the semantically meaninful fields, improving code readability. When only one structure is supplied, fieldfun
can also be used as an alternative to structfun
, the difference being that the output of structfun
is an array, while fieldfun
returns a structure, retaining the input format, again improving readability.
fun
is either a function handle or a text scalar giving the function's name or operator. The function must take N input arguments, i.e. equal to the number of input structures, and return a value.fun
is called once for each fieldF
inS1,...,SN
.S1
is a scalar structure or array of structures.S2,...,SN
are scalar structures, arrays of structures, or variables of any other class. IfS2,...,SN
are structures, their fields and field order must matchS1
. IfS2,...,SN
are not structures, then they are converted to structures, with the value being assigned to each field.
S
is a scalar structure with the same fields and field order asS1
. The value of each fieldF
inS
, i.e.S.(F)
, is the result offun(S1.(F),...,SN.(F))
.
treatmentGroup(1) = struct( 'name', "John", 'age', 30, 'vaccinated', true );
treatmentGroup(2) = struct( 'name', "Jane", 'age', 80, 'vaccinated', false );
controlGroup = struct( 'name', "Jim", 'age', 50, 'vaccinated', true );
allParticipants = fieldfun( @horzcat, treatmentGroup, controlGroup )
allParticipants = struct with fields:
name: ["John" "Jane" "Jim"]
age: [30 80 50]
vaccinated: [1 0 1]
More examples available in examples.mlx / examples.pdf.
Created in 2022b. Compatible with MATLAB release 2019b and later. Compatible with all platforms.
Published under MIT License (see LICENSE.txt).
Please cite George Abrahams (https://github.com/WD40andTape/fieldfun, https://www.linkedin.com/in/georgeabrahams).