Nesting depth and the error "Expected one output from a curly brace or dot indexing expression, but there were x results."
11 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
z8080
el 18 de Ag. de 2022
Comentada: Stephen23
el 19 de Ag. de 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
Respuesta aceptada
Bruno Luong
el 19 de Ag. de 2022
Editada: Bruno Luong
el 19 de Ag. de 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 comentarios
Más respuestas (1)
Jan
el 19 de Ag. de 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 comentarios
Image Analyst
el 19 de Ag. de 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
el 19 de Ag. de 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
Ver también
Categorías
Más información sobre Matrix Indexing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!