operator '==' not supported for operands of type 'cell'
105 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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 comentario
Mohammad Sami
el 4 de Jun. de 2020
Use string comparison functions.
strcmp(myTable.verb{i}, 'smashed')
Respuestas (3)
madhan ravi
el 4 de Jun. de 2020
ismember(myTable.verb(i), 'smashed')
1 comentario
madhan ravi
el 4 de Jun. de 2020
Editada: madhan ravi
el 12 de Oct. de 2020
And by the way you don’t need a loop.
Counts = nnz(ismember(myTable.verb(myTable.Response == true), 'smashed'))
Gizachew Dessalegn
el 18 de Feb. de 2025
Editada: Walter Roberson
el 18 de Feb. de 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 comentario
Walter Roberson
el 18 de Feb. de 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
el 18 de Feb. de 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 comentarios
Ver también
Categorías
Más información sobre Data Type Conversion 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!