Nesting depth and the error "Expected one output from a curly brace or dot indexing expression, but there were x results."
11 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
z8080
am 18 Aug. 2022
Kommentiert: Stephen23
am 19 Aug. 2022
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
Akzeptierte Antwort
Bruno Luong
am 19 Aug. 2022
Bearbeitet: Bruno Luong
am 19 Aug. 2022
a work around if you insist on oneline
a(1).x.y=1
a(2).x.y=2
axy = [struct([a.x]).y]
0 Kommentare
Weitere Antworten (1)
Jan
am 19 Aug. 2022
R2022a creates a different error:
a(1).x.y=1;
a(2).x.y=2;
[a.x.y]
"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 Kommentare
Image Analyst
am 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
am 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.y] % dot indexing accepts an array without any problem
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!