MATLAB Answers

Reference to non-existent field error

17 views (last 30 days)
zexi Leong
zexi Leong on 7 Jan 2020
Edited: Stephen Cobeldick on 7 Jan 2020
Hi there, I am new at MATLAB and currently trying to extract data from a particular subfolder from every subject and to put it all into an excel file
basically i want to retrieve mean times which is calculated from taking the mean of values in delay series variable (location: parent_directory > containing many subject folders labelled img0001, img0002 etc > each subject folder contains a .mat file called stopchoicert.mat > variable delayseries can be found here)
D = 'C:\Users\extlzx\Documents\MATLAB\Behavioural Data and script\behavioural data\';
S = dir(fullfile(D,'img*'));
for k = 264 %to access folder for subject number 264, usually i would put this as a loop from 1 to 300 but just for testing i put 264
SSRT = fullfile(D,S(k).name,'stopchoicert.mat');
if exist(SSRT,'file')==2;
T = load(SSRT);
meanssd = mean(delayseries); %delayseries is a 160X160 double(?) but only the first column contains value of interest. the rest are zeros. hence i took the mean and specified the first column and first row of meanssd which would contain my value that i wish to extract
S(k).data = T.meanssd(1,1);
end
end
writetable(struct2table(S), 'extracteddata2.xlsx')
Why do i get the error of:
Reference to non-existent field 'meanssd'.
Error in ssrtscript (line 8)
S(k).data = T.meanssd(1,1);
am I not creating new variable meanssd @ line 8? I do see variable meanssd in my workspace though. Encountered similar problems before but have been unable to resolve

  4 Comments

Show 1 older comment
Stephen Cobeldick
Stephen Cobeldick on 7 Jan 2020
Look at these three lines of code:
T = load(SSRT); % load file data into structure T.
meanssd = mean(delayseries); % allocate to variable MEANSSD, which you totally ignore.
S(k).data = T.meanssd(1,1); % access field MEANSSD of structure T.
You do not allocate to a field with that name, so it would have to exist in the file in order to be in that structure, which apparently is not the case. If the structure T does not have that field then trying to refer to it like that will throw an error.
"am I not creating new variable meanssd?"
Yes, but you never use it for anything.
zexi Leong
zexi Leong on 7 Jan 2020
Ah I think I understand but I am not too sure if i am on the right track.
D = 'C:\Users\extlzx\Documents\MATLAB\Behavioural Data and script\behavioural data\';
S = dir(fullfile(D,'img*'));
for k = 264
SSRT = fullfile(D,S(k).name,'stopchoicert2.mat');
if exist(SSRT,'file')==2;
T = load(SSRT);
meanssd = mean(delayseries);
T = struct('mssd',[])
T.mssd = meanssd(1,1)
S(k).data = T.mssd;
end
end
writetable(struct2table(S), 'extracteddata2.xlsx')
Would this make more sense?
Stephen Cobeldick
Stephen Cobeldick on 7 Jan 2020
"Would this make more sense?"
Not really, as now you load some file data into a structure T, which you then totally ignore (because that variable is never accessed, and it is completely reallocated two lines later).
As you have not explained what data you expect to be in S, it is hard to make any suggestions what you should be doing. Perhaps you are trying to do something like this:
T = load(SSRT);
V = mean(T.delayseries);
S(k).mssd = V(1,1);

Sign in to comment.

Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!