Search code examples
matlabargumentsmatlab-struct

Provide variable argument list


I have a function which accepts a variable number of input variables. The problem is, the number of input arguments I'm going to provide varies. As such, I store all the arguments in a structure:

function grandAvg(datafiles)

% Load up all averaged datafiles
avgs = struct();
for n=1:length(datafiles)
    avgs(n).avg = load(datafiles{n});
end

My question is, is there a way to expand this argument for the function? I need a way to convert this:

% DOES NOT WORK
avg = ft_timelockgrandaverage(cfg, avgs);

to this:

% WOULD WORK, BUT DO NOT WANT TO TYPE IT OUT
avg = ft_timelockgrandaverage(cfg, avgs(1).avg, ..., avgs(n).avg); 

EDIT TO ADD: So apparently my question wasn't clear. I know how to construct the function using varargin. My question was, if I am trying to use a build-in function which I don't want to or can't modify, how can I provide arguments in a variable manner? I.e., I don't know ahead of time how many argument's I'll be providing, so when I call the function, I'll have to call it with X number of arguments. In effect, I'm looking for a way to turn this:

someVar  <1xN struct>

into this:

someVar1  <1x1 struct>
someVar2  <1x1 struct>
...
someVarN  <1x1 struct>

in a programmatic manner. Thanks!


Solution

  • So, after playing around, I've got it. Using the example from above:

    Given an 1xN struct named foo, where each foo(n) contains the field bar, I would call the function as:

    function(foo(:).bar);
    

    This is the same as typing

    function(foo(1).bar, foo(2).bar, ..., foo(N).bar);
    

    In this way, I can dynamically expand or shrink foo and still have no problem calling the function.