Saving variables within a parfor loop

10 views (last 30 days)
I wish to save individual variables in my script that are defined in a parfor loop. I defined a function called saveVariables.m that would save a specified variable to a .mat file as follows.
function l = saveVariables(local_filename, variable, index)
save(['simulation_' num2str(index) '\' local_filename], variable)
l = 1;
end
The issue that I have is that MATLAB produces the error
Error using saveVariables (line 4)
Argument must contain a string.
I use the backlash '\' since I am running Matlab on Windows. local_filename is meant to be the string of the name of the file that I wish to save. How can I work around this string error?

Accepted Answer

Mohammad Abouali
Mohammad Abouali on 6 Sep 2015
Two things:
(1) When using save() the way that you are using the second input must be also an string. So if you want to save a variable called myVariable in a file called myOutputFile='D:\myDataFolder\somename.mat' then you have to issue the command as follows:
save(myOutputFile,'myVariable')
Note the quote around myVariable.
This is different when you use the non-function form of the save() as follow:
save 'D:\myDataFolder\somename.mat' myVariable
(2) save() command does not work in SPMD or PARFOR section. Click here for another post about the same topic;
You need to first define a function as follows:
function savetofile(data,fullfilename)
save(fullfilename,'data');
end
and then whenever you are in SPMD and PARFOR and willing to save something instead of using the regular save() command use the above function as follows:
savetofile(myVariable,myOutputFile)

More Answers (1)

Walter Roberson
Walter Roberson on 6 Sep 2015
But what are you passing in for "variable" ? It must be the name of a variable.
You should consider using fullfile() . And you should consider using sprintf() to construct the name.
save( fullfile(sprintf('simulation_%d',index), local_filename), variable)
  4 Comments
Sean Pierre
Sean Pierre on 6 Sep 2015
I am still receiving the same error of
Error using saveVariables (line 3)
Variable 'RD' not found.
. I changed my saveVariables script to
function l = saveVariables(local_filename, variable, index)
save( fullfile(sprintf('simulation_%d',index), local_filename), inputname(2));
l = 1;
end
and I call it with
saveVariables( 'RD_1pk.mat', RD, j);
Walter Roberson
Walter Roberson on 6 Sep 2015
function l = saveVariables(local_filename, variable, index)
varname = inputname(2);
savestruct.(varname) = variable;
save( fullfile(sprintf('simulation_%d',index), local_filename), '-struct', 'savestruct')
l = 1;
end

Sign in to comment.

Categories

Find more on Scope Variables and Generate Names in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!