operator '==' not supported for operands of type 'cell'
111 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaire
Réponses (3)
madhan ravi
le 4 Juin 2020
ismember(myTable.verb(i), 'smashed')
1 commentaire
madhan ravi
le 4 Juin 2020
Modifié(e) : madhan ravi
le 12 Oct 2020
And by the way you don’t need a loop.
Counts = nnz(ismember(myTable.verb(myTable.Response == true), 'smashed'))
Gizachew Dessalegn
le 18 Fév 2025
Modifié(e) : Walter Roberson
le 18 Fév 2025
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 commentaire
Walter Roberson
le 18 Fév 2025
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
le 18 Fév 2025
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 commentaires
Voir également
Catégories
En savoir plus sur Data Type Conversion dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!