# How to convert cell to cell array of character vectors.

142 views (last 30 days)
Blue on 5 Aug 2019
Answered: Blue on 14 Aug 2019
Hi,
So I have a basic table that looks like this but has over 60 000 rows:
A = [48.44, 48.16].';
B = ['A', 'B'].';
C = table(A, B);
The problem is that when I type unique(C.B) Matlab complains : Cell array input must be a cell array of character vectors.cell array of character vectors.
The commands class(btl_data.POLYGON) returns 'cell', and iscellstr(btl_data.POLYGON) returns 0. The commands char(C.B) and cellstr(C.B) fail (Element 1 is not a string scalar or character array. All elements of cell input must be string scalars or character arrays.)
So I dont know. I know this is really basic but nothing works. Column B really should be only characters.
Thoughts ?
Stephen23 on 14 Aug 2019
Note that this line
B = ['A', 'B'].';
is unlikely to be useful. Square brackets are a concatenation operator, so this
['A', 'B']
is exactly equivalent to this:
'AB'

Adam Danz on 13 Aug 2019
Edited: Adam Danz on 13 Aug 2019
At least one of the elements in btl_data.POLYGON is not a character vector. This demo below recreates the error.
A = [48.44, 48.16, 50].';
B = ['A', 'B', {5:10}].';
C = table(A, B);
unique(C.B)
% Error using cell/unique (line 85)
% Cell array input must be a cell array of character vectors.
To find the row numbers of table C that do not contain a char vector in column "B",
notChar_rowIndex = find(~cellfun(@ischar,C.B))
% ans =
% 3
Now you can look at those rows,
C(notChar_rowIndex,:)
Guillaume on 13 Aug 2019
The error message says it's the first element that's problematic. There may be more so there's indeed value in getting these row indices.

Blue on 14 Aug 2019
Thank you all for your input.