Hi all,
I have this code beneath and I am wondering if and how I could put this in a for loop in order to only have a code of about 5 lines or so?
Thanks in advance!
%% 1. Data laden
load('PP1_TOJ.mat');
%% SOA -350ms
responsemin350=Data(Data(:,3)==-350,[3 6]);
xmin350=(responsemin350==80);
soundfirstmin350=sum(xmin350, 'all');
ymin350=(responsemin350==79);
lightfirstmin350=sum(ymin350, 'all');
soundfirstmin350(soundfirstmin350==0)=1;
lightfirstmin350(lightfirstmin350==0)=1;
proportionlightfirstmin350=lightfirstmin350/20
%% SOA -250ms
responsemin250=Data(Data(:,3)==-250,[3 6]);
xmin250=(responsemin250==80);
soundfirstmin250=sum(xmin250, 'all');
ymin250=(responsemin250==79);
lightfirstmin250=sum(ymin250, 'all');
soundfirstmin250(soundfirstmin250==0)=1;
lightfirstmin250(lightfirstmin250==0)=1;
proportionlightfirstmin250=lightfirstmin250/20
%% SOA -150ms
responsemin150=Data(Data(:,3)==-150,[3 6]);
xmin150=(responsemin150==80);
soundfirstmin150=sum(xmin150, 'all');
ymin150=(responsemin150==79);
lightfirstmin150=sum(ymin150, 'all');
soundfirstmin150(soundfirstmin150==0)=1;
lightfirstmin150(lightfirstmin150==0)=1;
proportionlightfirstmin150=lightfirstmin150/20
%% SOA -50ms
responsemin50=Data(Data(:,3)==-50,[3 6]);
xmin50=(responsemin50==80);
soundfirstmin50=sum(xmin50, 'all');
ymin50=(responsemin50==79);
lightfirstmin50=sum(ymin50, 'all');
soundfirstmin50(soundfirstmin50==0)=1;
lightfirstmin50(lightfirstmin50==0)=1;
proportionlightfirstmin50=lightfirstmin50/20
%% SOA 0ms
response0=Data(Data(:,3)==0,[3 6]);
x0=(response0==80);
soundfirst0=sum(x0, 'all');
y0=(response0==79);
lightfirst0=sum(y0, 'all');
soundfirst0(soundfirst0==0)=1;
lightfirst0(lightfirst0==0)=1;
proportionlightfirst0=lightfirst0/20
%% SOA +50ms
responseplus50=Data(Data(:,3)==50,[3 6]);
xplus50=(responseplus50==80);
soundfirstplus50=sum(xplus50, 'all');
yplus50=(responseplus50==79);
lightfirstplus50=sum(yplus50, 'all');
soundfirstplus50(soundfirstplus50==0)=1;
lightfirstplus50(lightfirstplus50==0)=1;
proportionlightfirstplus50=lightfirstplus50/20
%% SOA +150ms
responseplus150=Data(Data(:,3)==150,[3 6]);
xplus150=(responseplus150==80);
soundfirstplus150=sum(xmin150, 'all');
yplus150=(responseplus150==79);
lightfirstplus150=sum(yplus150, 'all');
soundfirstplus150(soundfirstplus150==0)=1;
lightfirstplus150(lightfirstplus150==0)=1;
proportionlightfirstplus150=lightfirstplus150/20
%% SOA +250ms
responseplus250=Data(Data(:,3)==250,[3 6]);
xplus250=(responseplus250==80);
soundfirstplus250=sum(xplus250, 'all');
yplus250=(responseplus250==79);
lightfirstplus250=sum(yplus250, 'all');
soundfirstplus250(soundfirstplus250==0)=1;
lightfirstplus250(lightfirstplus250==0)=1;
proportionlightfirstplus250=lightfirstplus250/20
%% SOA +350ms
responseplus350=Data(Data(:,3)==350,[3 6]);
xplus350=(responseplus350==80);
soundfirstplus350=sum(xplus350, 'all');
yplus350=(responseplus350==79);
lightfirstplus350=sum(yplus350, 'all');
soundfirstplus350(soundfirstplus350==0)=1;
lightfirstplus350(lightfirstplus350==0)=1;
proportionlightfirstplus350=lightfirstplus350/20

 採用された回答

Star Strider
Star Strider 2020 年 2 月 1 日

2 投票

Try this:
D = load('PP1_TOJ.mat');
Data = D.Data;
V = [-350:100:150 -50:50:50 150:100:350];
for k = 1:numel(V)
responsemin{k,:} = Data(Data(:,3)==V(k),[3 6]);
soundfirstmin{k,:} = sum(responsemin{k}==80, 'all');
lightfirstmin{k,:}=sum(responsemin{k}==79, 'all');
soundfirstmin{k,:}(soundfirstmin{k}==0)=1;
lightfirstmin{k,:}(lightfirstmin{k}==0)=1;
proportionlightfirstmin{k,:}=lightfirstmin{k}/20;
end
The results are each (12x1) cell arrays. The ‘k’ subscripts correspond to the elements of ‘V’.

6 件のコメント

Eveline Kallenberg
Eveline Kallenberg 2020 年 2 月 1 日
Thanks very much for your reaction! However, I get an error...
What do I do with this?
Undefined operator '==' for input arguments of type 'cell'.
Error in Graph_SOA2 (line 27)
soundfirst{k,:}=sum(response(k)==80, 'all');
Star Strider
Star Strider 2020 年 2 月 1 日
I did not use or create ‘soundfirst’ (actually ‘xmin’ and ‘ymin’) in my code (which appears to have just now appeared anyway), instead using the result of ‘xmin’ in the ‘soundfirstmin’ calculation. If you want to create and save it as a separate array, add this assignment:
soundfirst{k,:} = response{k}==80;
and the same applies to ‘ymin’.
I did not save ‘soundfirst’ as a separate array since it did not appear to be used for anything else in your code, except to define ‘soundfirstmin’. The same applies to ‘lightfirstmin’.
Eveline Kallenberg
Eveline Kallenberg 2020 年 2 月 3 日
I know, I changed it slightly because "min" was not neccessary anymore. However, I still get the error.
This is the code I got right now:
%% 1. Data laden
D=load('PP1_TOJ.mat');
Data=D.Data;
%% Loop met SOA's
SOAs = [-350 -250 -150 -50 0 50 150 250 350];
for k = 1:numel(SOAs)
response{k}=Data(Data(:,3)==SOAs(k),[3 6]);
soundfirst{k,:}=sum(response(k)==80, 'all');
lightfirst{k}=sum(response(k)==79, 'all');
soundfirst{k}(soundfirst(k)==0)=1;
lightfirst{k}(lightfirst(k)==0)=1;
proportionlightfirst{k}=lightfirst(k)/20;
end
Rik
Rik 2020 年 2 月 3 日
Your response variable is a cell, so you need to use curly braces if you want the contents.
I would also suggest pre-allocating the variables, especially during debugging, so you know you have fully overwritten the variables created in the previous runs of the code.
Eveline Kallenberg
Eveline Kallenberg 2020 年 2 月 3 日
Sorry, but I have very little experience in coding so I have no idea what you are saying haha sorry! Could you maybe give an example with code?
Rik
Rik 2020 年 2 月 3 日
soundfirst{k,:}=sum(response{k}==80, 'all');
% ^ ^
% not (k)
%and before your loop:
response={};
lightfirst={};
soundfirst={};

サインインしてコメントする。

その他の回答 (1 件)

Eveline Kallenberg
Eveline Kallenberg 2020 年 2 月 3 日

0 投票

Thanks everyone for your time to try to help me! Ultimately, I figured it out and my code can be found below.
%% 1. Loading data
D=load('PP1_TOJ.mat');
Data=D.Data;
%% 2. For loop with SOA's
SOAs = [-350 -250 -150 -50 0 50 150 250 350];
for k = 1:numel(SOAs)
response(:,:)=Data(Data(:,3)==SOAs(k),[3 6]);
soundfirst(k)=sum(response(:,2)==80, 'all');
lightfirst(k)=sum(response(:,2)==79, 'all');
proportionlightfirst(k)=lightfirst(k)/20;
end

3 件のコメント

Star Strider
Star Strider 2020 年 2 月 3 日
That was essentially my original Answer.
Eveline Kallenberg
Eveline Kallenberg 2020 年 2 月 3 日
Yes almost, so thanks to your help I managed to work it out! :D
Star Strider
Star Strider 2020 年 2 月 3 日
As always, my pleasure!

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeLoops and Conditional Statements についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by