structfun

Evaluates the function func on the fields of the structure s. Each field is passed into the function individually.

Syntax

R = structfun(func, input)

R = structfun(..., 'uniformoutput', flag)

R = structfun(..., 'errorhandler', errorFunc)

[R1, ...] = structfun(...)

Inputs

func
Function to be evaluated.
Type: char | string | handle
input
Structure to be operated on.
Type: struct
flag
Uniform output type which specifies the class of R. By default, flag is 1, with R being a matrix. If flag is 0, R will be a struct with the same fields as the input.
Type: integer | log
errorFunc
A function to be evaluated if func throws an error. errorFunc accepts an additional input argument err. err is a structure which contains the fields 'index', the index of the element that caused the error and 'message', the error message. The number of outputs of errorFunc must be the same as func's.
Type: char | string | handle

Outputs

R
Resulting output.

Examples

String structfun with default options:
s = struct('a', 1:3, 'b', 5:10, 'c', 1:10);
R = structfun('max', s)
R = [Matrix] 3 x 1
 3
10
10
Function handle structfun with default options:
function z = my_func(a)
  z = max(a);
end
s = struct('a', 1:3, 'b', 5:10, 'c', 1:10);
R = structfun(@my_func, s)
R = [Matrix] 3 x 1
 3
10
10
structfun with UniformOutput option:
s = struct('a', 1:3, 'b', [1 4 9; 16 25 36], 'c', [1+2i 2+2i; 3+i 4i]);
R = structfun('sqrt', s, 'uniformoutput', 0)
R = struct [
  a: [Matrix] 1 x 3
  1.00000  1.41421  1.73205
  b: [Matrix] 2 x 3
  1  2  3
  4  5  6
  c: [Matrix] 2 x 2
  1.27202 + 0.78615i  1.55377 + 0.64359i
  1.75532 + 0.28485i  1.41421 + 1.41421i
]
structfun with multiple outputs:
function [z1, z2] = my_func(a)
  z1 = sqrt(a);
  z2 = power(a,2);
end
s = struct('a', 1:3, 'b', [1 4 9; 16 25 36]);
[R1, R2] = structfun(@my_func, s, 'uniformoutput', 0)
R1 = struct [
  a: [Matrix] 1 x 3
  1.00000  1.41421  1.73205
  b: [Matrix] 2 x 3
  1  2  3
  4  5  6
]
R2 = struct [
  a: [Matrix] 1 x 3
  1  4  9
  b: [Matrix] 2 x 3
    1   16    81
  256  625  1296
]
structfun with an error handling function:
function z = my_error_func(err, a)
  err.index
  err.message
  z = '';
end

s = struct('a', 'Hello World1', 'b', 'Hello World2', 'c', 1:3);
R = structfun(@(x) strsplit(x), s, 'uniformoutput', 0, 'errorhandler', @my_error_func)
ans = 3
ans = Error: invalid input in argument 1; type must be string
R = struct [
  a: 
  {
    [1,1] Hello
    [1,2] World1
  }
  b: 
  {
    [1,1] Hello
    [1,2] World2
  }
  c: 
]