operator '==' not supported for operands of type 'cell'
114 次查看(过去 30 天)
显示 更早的评论
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 个评论
回答(3 个)
madhan ravi
2020-6-4
ismember(myTable.verb(i), 'smashed')
1 个评论
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
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
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
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)
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')
Or take the counts of each group defined by unique combinations of verb and response.
G = groupcounts(t, {'verb', 'response'})
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Data Type Conversion 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!