OK, it doesn't like the character string for the time field selector and unfortunately, addtodate() won't accept the field as an index.
It is possible to work around it if one looks inside the addtodate() m-file and sorta' cheats. addtodate calls a private mex function addtodatemx() that does the actual work and uses the lookup table position for the time field instead of the string so that gets around the above problem.
Just for grins I made a private subdir in my working directory and made a local copy of the addtodatemx and just to prove the point created
function [dn] = addtodatevec(date0,delta,field) %ADDDATE - version vectorized...
>> myadddate(d0,[1:4]','day') ans = 730487 730488 730489 730490 >>
as requested. To do it requires either making a copy of the private function addtodatemex in a private subdir below where you place the above or adding the vectorized function to the existing subdir (not recommended).
Mostly an experiment since my previous release of ML didn't have arrayfun() I was interested to try to make it work...
Would be interested if there's a way to make arrayfun work w/ a combination of scalars and arrays w/o the explicit repmat() -- seems like a logical extension that could be handled internally.