Assign variables while importing data
15 views (last 30 days)
Show older comments
I have a data set with multiples files, and there are 2 coloumns in each file. I have imported the files using the following code:
files = dir('*.txt');
for i=1:length(files)
eval(['load ' files(i).name ' -ascii']);
end
I have the data in my workspace now but I need to assign variables to each coloumn. Furthermore, I have to use those variables in a function to normalize all the data at the same time and plot in a single graph.
Is there any approach I can take to assign variables so that the code goes through each file one by one, and take the assigned variables to give answer for all dataset at once.
function [zero,norm,ramanzeronorm] = zeronorm(wavenumber,rm)
My variables are wavenumber and rm.
Any help will be appreciated.
0 Comments
Accepted Answer
Stephen23
on 27 Jan 2020
Edited: Stephen23
on 28 Jan 2020
Do NOT use eval for importing data, unless you intentionally want to force yourself into writing slow, complex, buggy code. Read this to know why:
Instead you should import the data into a matrix, optionally assigning it to one array using indexing, for example using a cell array as the documentation examples show:
Or using the same structure returned by dir:
S = dir('*.txt');
for k = 1:numel(S)
M = dlmread(S(k).name); % better than LOAD.
... do whatever with matrix M, e.g.:
wn = M(:,1); % wavenumber
rn = M(:,2); % rn
...
S(k).data = M; % optional: store any data you want for later.
end
Then you can trivially access the data in that structure, e.g. using loops or indexing:
For example, you can easily vertically concatenate all of the file data together:
alldata = vertcat(S.data);
2 Comments
Stephen23
on 28 Jan 2020
Edited: Stephen23
on 28 Jan 2020
You can store any data you want in the structure, e.g.:
for ...
...
S(k).mycolumn = whatever column of data you want to store;
end
mymat = [S.mycolumn];
What size mymat is depends entirely on how often the loop iterates and on the size of each column: if each column you store has size 1024x1 and it iterates five times, then mymat will have size 1024x5.
Read more about how this works:
More Answers (0)
See Also
Categories
Find more on Structures in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!