When i covert a structure to cell array, my fieldNames disappear

조회 수: 3 (최근 30일)
Shambhavi Adhikari
Shambhavi Adhikari 2021년 3월 10일
편집: Jorg Woehl 2021년 3월 11일
I am trying to convert a structure to a cell array, when i do that, i am not able to see field on my new cell array, i only see values. Is there a way to have both field and values on the cell array?

답변 (3개)

Fangjun Jiang
Fangjun Jiang 2021년 3월 10일
There is no meta data text info for cell array. Use struct2table() to convert structure to table.
  댓글 수: 2
Shambhavi Adhikari
Shambhavi Adhikari 2021년 3월 10일
Error using table.fromScalarStruct (line 480)
Fields in a scalar structure must have the same number of rows.
Error in struct2table (line 65)
t = table.fromScalarStruct(s);
Shambhavi Adhikari
Shambhavi Adhikari 2021년 3월 10일
This is the error i have when i convert to table.

댓글을 달려면 로그인하십시오.


ANKUR KUMAR
ANKUR KUMAR 2021년 3월 10일
"Is there a way to have both field and values on the cell array?"
Let us create a sample structure
S.x = linspace(0,4*pi);
S.y = cos(S.x);
You can use fieldnames and struct2cell to extract the values:
name=fieldnames(S);
value=struct2cell(S);

Jorg Woehl
Jorg Woehl 2021년 3월 10일
편집: Jorg Woehl 2021년 3월 11일
Shambhavi, you can use fieldnames to extract the fieldnames from your structure and add it to the end of your new cell array. For example, taking this 1-by-2 structure array from the MATLAB documentation:
% sample structure
field1 = 'f1'; value1 = zeros(1,10);
field2 = 'f2'; value2 = {'a', 'b'};
field3 = 'f3'; value3 = {pi, pi.^2};
field4 = 'f4'; value4 = {'fourth'};
s = struct(field1,value1,field2,value2,field3,value3,field4,value4);
% write data from structure to cell array
sCell = struct2cell(s);
% add fieldnames to cell array
sCell(:,:,end+1) = fieldnames(s);
sCell(:,:,1) to sCell(:,:,end-1) now contain your data, while sCell(:,:,end) contains your fieldnames.
If you prefer to have the fieldnames listed first, in sCell(:,:,1), followed by your data in sCell(:,:,2) to sCell(:,:,end), issue the following command after the above:
sCell = circshift(sCell,1,3);

카테고리

Help CenterFile Exchange에서 Structures에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by