How to transform 'double' into 'cell array'?

조회 수: 4 (최근 30일)
John
John 2017년 1월 9일
편집: Guillaume 2017년 1월 9일
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
Beder 2017년 1월 9일
Not sure about it - without trying - maybe you need so replace sum(A{k,C}) by sum(A(k,C))?
John
John 2017년 1월 9일
thanks, @Peter Albrecht. I tried this one, but the following error occurs: Undefined function 'sum' for input arguments of type 'table'.

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

답변 (1개)

Guillaume
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))

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by