Skip to content

Commit af4262b

Browse files
grp2idx: fix empty categorical handling
1 parent 7cf774b commit af4262b

1 file changed

Lines changed: 33 additions & 2 deletions

File tree

inst/grp2idx.m

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
elseif (isstring (s) && isvector (s))
5252
s_was_string = true;
5353
s = cellstr (s);
54-
elseif (iscategorical (s) && isvector (s))
54+
elseif (iscategorical (s) && (isvector (s) || isempty (s)))
5555
s_was_categorical = true;
5656
undef = isundefined (s);
5757
cats = categories (s);
@@ -100,7 +100,13 @@
100100

101101
if (nargout > 1)
102102
if (s_was_categorical)
103-
gn = categories (categorical (s));
103+
if (isempty (s))
104+
gn = cats(:);
105+
elseif (all (isnan (g)))
106+
gn = cell (0,1);
107+
else
108+
gn = cats(:);
109+
endif
104110
elseif (s_was_duration)
105111
gn = cellstr(gl);
106112
elseif (iscellstr (gl))
@@ -333,3 +339,28 @@
333339
%! assert (isequaln (g, [NaN; 1; 2; NaN]));
334340
%! assert (isequal (gn, {'high'; 'low'}));
335341
%! assert (isequal (gl, string ({'high'; 'low'})));
342+
343+
## Test empty categorical with defined categories
344+
%!test
345+
%! s = categorical ({}, {'low','med','high'});
346+
%! [g, gn, gl] = grp2idx (s);
347+
%! assert (isempty (g));
348+
%! assert (isequal (gn, {'low'; 'med'; 'high'}));
349+
%! assert (isequal (gl, categorical ({'low'; 'med'; 'high'})));
350+
351+
## Test all-undefined categorical
352+
%!test
353+
%! s = categorical ({'a','b','c'});
354+
%! s(:) = categorical (missing);
355+
%! [g, gn, gl] = grp2idx (s);
356+
%! assert (isequaln (g, [NaN; NaN; NaN]));
357+
%! assert (isempty (gn));
358+
%! assert (isequal (gl, categorical (cell (0,1))));
359+
360+
## Test all-missing string
361+
%!test
362+
%! s = string ({missing, missing});
363+
%! [g, gn, gl] = grp2idx (s);
364+
%! assert (isequaln (g, [NaN; NaN]));
365+
%! assert (isempty (gn));
366+
%! assert (isequal (gl, string (cell (0,1))));

0 commit comments

Comments
 (0)