heds1
heds1

Reputation: 97

Dynamic Naming of Matlab Function

I currently have a MATLAB function that looks like this:

function outfile=multi_read(modelfrom,modelto,type)

models=[modelfrom:1:modelto];
num_models=length(models);

model_path='../MODELS/GRADIENT/'

for id=1:num_models
    fn=[model_path num2str(models(id)) '/'];  %Location of file to be read
    outfile=model_read(fn,type);              %model_read is a separate function
end
end

The idea of this function is to execute another function model_read for a series of files, and output these files to the workspace (not to disk). Note that the output from model_read is a structure! I want the function to save the file to the workspace using sequential names, similar to typing:

file1=multi_read(1,1,x)
file2=multi_read(2,2,x)
file3=multi_read(3,3,x)
etc.

which would give file1, file2 and file3 in the workspace, but instead by recalling the command only once, something like:

multi_read(1,3,x)

which would give the same workspace output.

Essentially my questions is, how do I get a function to output variables with multiple names without having to recall the function multiple times.

Upvotes: 0

Views: 382

Answers (2)

Dennis Jaheruddin
Dennis Jaheruddin

Reputation: 21563

Here is code to do what you ask:

for i = 1:3
   istr=num2str(i)
   line = ['file' istr '= multi_read(' istr ', ' istr ', x)']
   eval(line)
end

Alternatively, here is code to do what you should want:

for i = 1:3
    file{i} = multi_read(i,i,x)
end

Upvotes: 1

Acorbe
Acorbe

Reputation: 8391

As suggested in the comment I would try this approach which is more robust, at least IMHO:

    N = tot_num_of_your_files; %whatever it is          

    file = cellfun(@(i)multi_read(i,i,x),mat2cell(1:N,1,ones(1,N)),...
                         'UniformOutput' , false); %(x needs to be defined)

You will recover objects by doing file{i}.

Upvotes: 2

Related Questions