Possible bug in struct2table()
    19 views (last 30 days)
  
       Show older comments
    
    Mohammad Abouali
      
 on 6 Apr 2016
  
    
    
    
    
    Commented: Peter Perkins
    
 on 1 Oct 2018
            But if I have an array of that structure it works just fine.
Try the following code:
load singleStruct.mat
% This ends up in error 
try 
    myTBL = struct2table(singleStruct);
catch
    disp('I told you this ends up in error.');
end
% This wont end up in Error
structArray(1) = singleStruct;
structArray(2) = singleStruct;
myTBL = struct2table(structArray);
I have attached the singleStruct.mat for you guys to try.
Any work around?
Well, I usually have an array of those structure, this is really an special case that it is only one.
Accepted Answer
  Matthew Eicholtz
      
 on 6 Apr 2016
        
      Edited: Matthew Eicholtz
      
 on 6 Apr 2016
  
      You may have already noticed this, but the error is due to having fields with an unequal number of rows. When you pass a scalar structure as input to struct2table(), it expects every row to be a different row in the table. This is problematic if the number of rows for each field varies.
In your provided data, it looks like there are three fields causing this problem: ELEVB, ELEVB_FR, and SNOEB.
One simple workaround is to encapsulate those fields into 1x1 cell arrays.
4 Comments
  Austin Healy
 on 20 Sep 2018
				Thanks for the explanation and now that I see AsArray I'll remember to set it. I understand your point but frankly, I think the default value for AsArray should be true. In a programmatic setting I can't think of a situation where I would so radically want to change behavior when I happen to have a scalar array
  Peter Perkins
    
 on 1 Oct 2018
				That's why the parameter exists. Interactively, it would be a pain to type all that. Programmatically, it's a good idea for the reason you cite. It's similar to "always use the DIM argument to the mean function when you are writing a script or function that will be reused."
More Answers (1)
  Lukas
      
 on 26 Apr 2017
        As this error only occurs with (1x1) structs, there is a simple workaroud. To convert a struct into a table, use the following code:
largeStruct = repmat(struct,2,1);
table = struct2table(largeStruct);
table = table(1,:);
0 Comments
See Also
Categories
				Find more on Data Type Conversion in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!