Matlab: How to update struct fields "in place" using struct fun?
matlab
Solution
For the impatient reader, the `structfun` solution is at the bottom of my answer :-) But I would first ask myself...
What's wrong with using a loop? The following example shows how it can be done:
%# An example structure
S.a = 2;
S.b = 3;
%# An example function
MyFunc = @(x) (x^2);
%# Retrieve the structure field names
Names = fieldnames(S);
%# Loop over the field-names and apply the function to each field
for n = 1:length(Names)
S.(Names{n}) = MyFunc(S.(Names{n}));
end
Matlab functions such as `arrayfun` and `cellfun` typically are slower than an explicit loop. I'm guessing `structfun` probably suffers from the same problem, so why bother?
However, if you insist on using `structfun` it can be done as follows (I made the example a little more complicated just to emphasize the generality):
%# structfun solution
S.a = [2 4];
S.b = 3;
MyFunc = @(x) (x.^2);
S = structfun(MyFunc, S, 'UniformOutput', 0);
Problem
I have a structure ``` s.a = [1 2 3]; s.b = [2 3 4 5]; s.c = [9, 6 ,3]; s.d = ... % etc. - you got the gist of it ``` Now I want to apply a function/operation on the data stored in each field and modify the content of the field, that is I want to apply ``` s.a = myFun( s.a ); s.b = myFun( s.b ); s.c = myFun( s.c ); % etc. ... ``` How can I do it without explicitly write all the fields as above? I was thinking of `structfun` - but I'm not so sure how to accomplish this "in place" modification... Thanks!