Nesting depth and the error "Expected one output from a curly brace or dot indexing expression, but there were x results."

5 views (last 30 days)
Consider this toy example:
a(1).x.y=1
a(2).x.y=2
[a.x.y]
Why does this produce the infamous error
Expected one output from a curly brace or dot indexing expression, but there were 2 results.
..instead of just listing all values from across all indexed structure elements, as in this other example where the nesting is at level 2 instead of level 3:
a(1).x=1
a(2).x=2
[a.x]
>> [a.x]
ans =
1 2

Accepted Answer

Bruno Luong
Bruno Luong on 19 Aug 2022
Edited: Bruno Luong on 19 Aug 2022
a work around if you insist on oneline
a(1).x.y=1
a = struct with fields:
x: [1×1 struct]
a(2).x.y=2
a = 1×2 struct array with fields:
x
axy = [struct([a.x]).y]
axy = 1×2
1 2

More Answers (1)

Jan
Jan on 19 Aug 2022
R2022a creates a different error:
a(1).x.y=1;
a(2).x.y=2;
[a.x.y]
Intermediate dot '.' indexing produced a comma-separated list with 2 values, but it must produce a single value when followed by subsequent indexing operations.
"instead of just listing all values from across all indexed structure elements"
Think twice. [a.x] is an array already with 2 elements. The dot operator cannot handle an array as input, but a scalar struct only. This is plausible. Consider, that there is no logical decision for the dimensions of the output. It is also unclear, what you call "just listing all values".
  3 Comments
Image Analyst
Image Analyst on 19 Aug 2022
Is there a bracket/brace/parentheses solution to this, or is the only way a simple but intuitive for loop
a(1).x.y=1;
a(2).x.y=2;
all_y = zeros(numel(a), 1);
for k = 1 : numel(a)
all_y(k) = a(k).x.y;
end
or possibly a cryptic call to structfun or some other weird function
Stephen23
Stephen23 on 19 Aug 2022
"The dot operator cannot handle an array as input, but a scalar struct only."
???
a(1).x.y=1;
a(2).x.y=2;
tmp = [a.x] % array struct, not scalar struct
tmp = 1×2 struct array with fields:
y
[tmp.y] % dot indexing accepts an array without any problem
ans = 1×2
1 2

Sign in to comment.

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!