operator '==' not supported for operands of type 'cell'

조회 수: 98 (최근 30일)
Kayla Black
Kayla Black 2020년 6월 4일
댓글: Walter Roberson 2025년 2월 18일
While there are some useful answers to this type of question, a lot of them are too advanced for me to understand/use as a beginning MATLAB student. I am trying to loop through rows of a table to find instances in which in a particular index is equal to something. Here is a picture of what my table looks like:
and I am interested in comparing when a subject has responded true or false to a certain verb ('smashed' is one of 3). My idea for doing this would be to make a for loop such as the following:
smashedFalseCounter = 0;
for i = 1:height(myTable)
if myTable.verb(i) == 'smashed'
if expTable2.response(i) == false
smashedFalseCounter = smashedFalseCounter + 1;
end
end
end
And I get the following error message:
  댓글 수: 1
Mohammad Sami
Mohammad Sami 2020년 6월 4일
Use string comparison functions.
strcmp(myTable.verb{i}, 'smashed')

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

답변 (3개)

madhan ravi
madhan ravi 2020년 6월 4일
ismember(myTable.verb(i), 'smashed')
  댓글 수: 1
madhan ravi
madhan ravi 2020년 6월 4일
편집: madhan ravi 2020년 10월 12일
And by the way you don’t need a loop.
Counts = nnz(ismember(myTable.verb(myTable.Response == true), 'smashed'))

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


Gizachew Dessalegn
Gizachew Dessalegn 2025년 2월 18일
편집: Walter Roberson 2025년 2월 18일
for s = 1:ncntry
for r = 1:ncntry
Esr14{s,r} = zeros(nsec, 1);
if r ~= s
for t = 1:ncntry
if t ~= s && t ~= r
% Access cell contents using {} and perform operations
term = (va_cs(1,t) * Bmat(t,s))'; % Now numeric values
Esr14{s,r} = Esr14{s,r} + term .* EXGR_FNL_cs_c(s,r);
end
end
end
end
end
Operator '*' is not supported for operands of type 'cell'.
  댓글 수: 1
Walter Roberson
Walter Roberson 2025년 2월 18일
Based on the above code, we can guess that either va_cs or Bmat are cell arrays. The code might have to be
term = (va_cs{1,t} * Bmat(t,s))';
or
term = (va_cs(1,t) * Bmat{t,s})';
or
term = (va_cs{1,t} * Bmat{t,s})';
There is also a significant chance that EXGR_FNL_cs_c is a cell array, so the line after that might need to be
Esr14{s,r} = Esr14{s,r} + term .* EXGR_FNL_cs_c{s,r};

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


Steven Lord
Steven Lord 2025년 2월 18일
Another possibility for the original question would be to create a pivot table or to use groupcounts or other grouping functions. Let's make a sample table:
subject = (1:9).';
verbs = {'smashed', 'crushed'};
n = numel(verbs);
verb = verbs(randi(n, 1, 9)).';
response = rand(9, 1) > 0.5;
t = table(subject, verb, response)
t = 9x3 table
subject verb response _______ ___________ ________ 1 {'crushed'} false 2 {'smashed'} false 3 {'smashed'} false 4 {'crushed'} true 5 {'crushed'} true 6 {'smashed'} true 7 {'crushed'} false 8 {'smashed'} true 9 {'crushed'} true
Now let's create a pivot table with response as the variables and the verbs as the rows.
P = pivot(t, Columns='response', Rows='verb')
P = 2x3 table
verb false true ___________ _____ ____ {'crushed'} 2 3 {'smashed'} 2 2
Or take the counts of each group defined by unique combinations of verb and response.
G = groupcounts(t, {'verb', 'response'})
G = 4x4 table
verb response GroupCount Percent ___________ ________ __________ _______ {'crushed'} false 2 22.222 {'crushed'} true 3 33.333 {'smashed'} false 2 22.222 {'smashed'} true 2 22.222

카테고리

Help CenterFile Exchange에서 Data Type Conversion에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by