error using unique function

s is a cell matrix (178000x9) I want to find the unique values of s in the first column. ID=unique(s(:,1));
I received the following error. Error using cell/unique (line 95) Input A must be a cell array of string
what could be the reason?

1 Kommentar

If the first column is all non-numeric it would not be throwing that error. What is returned from:
iscellstr(s(:,1))

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Mike Hosea
Mike Hosea am 26 Jul. 2012
Bearbeitet: Mike Hosea am 26 Jul. 2012

0 Stimmen

What type of data is in the cell array? When you use UNIQUE on a cell array, the only case that's supported is when the elements of the cell array are strings. Is that case not working for you?
>> c = {'abc','abc','def','defg'}';
>> unique(c(:,1))
ans =
'abc'
'def'
'defg'

7 Kommentare

Danielle Leblanc
Danielle Leblanc am 26 Jul. 2012
no . I am receiving an error Error using cell/unique (line 95) Input A must be a cell array of string
Mike Hosea
Mike Hosea am 26 Jul. 2012
Do you have [] entries? Make sure that any empty entries are '', not [].
Danielle Leblanc
Danielle Leblanc am 26 Jul. 2012
how can I tell if I have []. visually I can't because it take too long to load and I have too many observations
Sean de Wolski
Sean de Wolski am 26 Jul. 2012
You can use iscellstr as I did above.
Danielle Leblanc
Danielle Leblanc am 26 Jul. 2012
Bearbeitet: Danielle Leblanc am 26 Jul. 2012
iscellstr(s(:,1))
ans =
0
Mike Hosea
Mike Hosea am 26 Jul. 2012
Yes, this is what we expected. You do not have a cell array of only strings. You can find the non-strings with
find(cellfun(@(x)~ischar(x),s))
You do not mention where this data came from. If it began as a
s = cell(m,n);
and was later partially populated, then you might resolve the problem by changing that to
s = repmat({''},m,n);
Danielle Leblanc
Danielle Leblanc am 26 Jul. 2012
Thanks this solved the problem

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Wayne King
Wayne King am 26 Jul. 2012
Bearbeitet: Wayne King am 26 Jul. 2012

1 Stimme

Is it a cell array of numeric values?
You can use cell2mat()
A = {1 5 9 ; 2 3 4; 2 4 5};
B = unique(cell2mat(A(:,1)));

Kategorien

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by