Here is one way, using only comma separated lists and deal
.
S = struct( 'a', {1, 2}, 'b', {3, 4} ); % create a struct array
[ S.nf ] = deal( num2cell( [S.a] + [S.b] ){:} ); % deal to new field in array
However, I get the impression that you're after one-liners, rather than "efficiency" per se. Don't. This is ugly. There's nothing wrong with a for loop here.
Also, I fully agree with Cris's comment. It's best to rethink your approach. Doing something like the code below is presumably much more preferable than trying to perform operations over struct arrays:
S.a = [1,2];
S.b = [2,4];
S.nf = S.a + S.b;
I hasten to note that this is effectively what a dataframe is in R too: a bunch of same-sized vectors, each represented by their own fieldname, and packaged inside an object which allows you to access each array by its fieldname.