MATLAB: Put nested structure into another structure

struct2tablestructures

Below I have a function that returns a struct ( my actual code has many functions as methods in an object that return similar data).
function out = get_results1
mystruct.name = "result1";
mystruct.value = 23;
mystruct.unit = 'mph';
out = mystruct;
end
However I have some functions that return more than one result.. for example:
function out = get_results2
mystruct.name = {"result1"; "result2"};
mystruct.value = {23; 34 };
mystruct.unit = 'mph';
out = mystruct;
end
My goal is to comebine the results of all of these functions into a table like the following:
a = get_results1();
b = get_results2();
combined = [a, b];
mytable = struct2table(combined);
however this will not work because of inconsistent sizes… Could someone tell me the following:
1) Should I restructure my functions to provide a different output?
2) Is there another way pull out the nested structures from the functions that have multiple results?

Best Answer

Why not go directly to a table array?
a = maketable("result1", 23, "mph");
b = maketable(["result1"; "result2"], [23; 34], ["mph"; "mph"]);
c = [a; b]
function T = maketable(name, value, unit)
T = table(name, value, unit);
end
You could be a little more sophisiticated and avoid the need to duplicate the units by checking inside maketable if you need to repmat one or more of the variables (for scalar expansion) or you could call maketable more frequently.
a = maketable("result1", 23, "mph");
b = [a; maketable("result1", 23, "mph")];
c = [b; maketable("result2", 34, "mph")]
function T = maketable(name, value, unit)
T = table(name, value, unit);
end