How to transform 'double' into 'cell array'?
조회 수: 4 (최근 30일)
이전 댓글 표시
My code:
B = zeros(height(A),1);
col_names = A.Properties.VariableNames; % Replicate header names
for k = 1:height(A)
% the following 'cellfun' compares each column to the values in A.L{k},
% and returns a cell array of the result for each of them, then
% 'cell2mat' converts it to logical array, and 'any' combines the
% results for all elements in A.L{k} to one logical vector:
C = any(cell2mat(...
cellfun(@(x) strcmp(col_names,x),A.L{k},...
'UniformOutput', false).'),1);
% then a logical indexing is used to define the columns for summation:
B(k) = sum(A{k,C});
end
generates the following error message. Thanks for helping out!
Error using cellfun
Input #2 expected to be a cell array, was double instead.
This is how table 'A' looks like:
댓글 수: 2
Beder
2017년 1월 9일
Not sure about it - without trying - maybe you need so replace sum(A{k,C}) by sum(A(k,C))?
답변 (1개)
Guillaume
2017년 1월 9일
편집: Guillaume
2017년 1월 9일
Clearly from the error message, one of the rows of A has a double matrix instead of a cell array in column L. The simplest way to find out:
dbstop if error
run your code and look at the value of k when it breaks into the debugger. This is the offending row.
edit: the following will give you all the offending rows:
find(cellfun(@(r) ~iscell(r), A.L))
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!