(HELP) Assign char values from a structure to a double column vector
    4 views (last 30 days)
  
       Show older comments
    
    Ana Maldonado Gómez
 on 11 May 2021
  
    
    
    
    
    Commented: Ana Maldonado Gómez
 on 17 Jun 2021
            Hi, everyone! :)
I hope you all are doing well.
I wanted to ask for help, since I am struggling a bit with a for loop.
I have this for loop:

AllEvents=[];
AllEvents=zeros(length(EEG.event),1);
for i=1:length(EEG.event)
AllEvents(i,1)=EEG.event(i).type;
end
However, every time I try to run it, I get the following error:
Unable to perform assignment because the size of the left side is 1-by-1 and the size of the right side is 1-by-3.
The values of the variables (and/or structures, sorry I am a bit inexperienced) are:
- AllEvents = 1244x1 double
- EEG.event = 1 x 2444 struct array with fields: type, edftype, latency, urevent
- i (before running the loop) = 1x1244 double
- Mango (extra variable that I used to see the size of the EEG.event(i).type) = 1x3 char.
So far, I think the purpose of the loop is to assign the values of the  EEG.event(i).type to the all events column vector, however I think it is affecting that EEG.event is a structure and the "type" field contains  characters (they look like strings).
I was wondering, and I'd be truly grateful if someone could guide me with this (please). 
Thank you for everything in advance.
0 Comments
Accepted Answer
  Madhav Thakker
    
 on 20 May 2021
        
      Edited: Madhav Thakker
    
 on 20 May 2021
  
      Hi Ana, 
The error message clearly says the problem - Unable to perform assignment because the size of the left side is 1-by-1 and the size of the right side is 1-by-3. 
AllEvents(i,1) is of size 1-by-1 and EEG.event(i).type is of size 1-by-3. 
AllEvents(i,1)=EEG.event(i).type;
Can you try with something like this -  
AllEvents=[];
AllEvents=char(length(EEG.event),3); % Changed the type and size so that each row is char array of size 1-by-3
for i=1:length(EEG.event)
    AllEvents(i)=EEG.event(i).type; % assigning the type value to each row
end
2 Comments
  Stephen23
      
      
 on 20 May 2021
				
      Edited: Stephen23
      
      
 on 20 May 2021
  
			AllEvents(i,:) = EEG.event(i).type;
%         ^^^ Correct indexing for assigning the 1x3 char vector to each row.
But this will fail as soon as you have a <type> character vector with two, four, five, or greater number of characters. I.e. this answer is not robust. If you want to write robust code, either use a cell array or a string array.
More Answers (0)
See Also
Categories
				Find more on Loops and Conditional Statements 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!

