diff --git a/inst/grp2idx.m b/inst/grp2idx.m index 051123a4..7257b06e 100644 --- a/inst/grp2idx.m +++ b/inst/grp2idx.m @@ -51,7 +51,7 @@ elseif (isstring (s) && isvector (s)) s_was_string = true; s = cellstr (s); - elseif (iscategorical (s) && isvector (s)) + elseif (iscategorical (s) && (isvector (s)|| isempty (s))) s_was_categorical = true; undef = isundefined (s); cats = categories (s); @@ -100,7 +100,13 @@ if (nargout > 1) if (s_was_categorical) - gn = categories (categorical (s)); + if (isempty (s)) + gn = cats(:); + elseif (all (isnan (g))) + gn = cell (0,1); + else + gn = cats(:); + endif elseif (s_was_duration) gn = cellstr(gl); elseif (iscellstr (gl)) @@ -333,3 +339,45 @@ %! assert (isequaln (g, [NaN; 1; 2; NaN])); %! assert (isequal (gn, {'high'; 'low'})); %! assert (isequal (gl, string ({'high'; 'low'}))); + +%!test +%! if (! exist ('categorical', 'file')) +%! return; +%! endif +%! s = categorical ({}, {'low','med','high'}); +%! [g, gn, gl] = grp2idx (s); +%! assert (isempty (g)); +%! assert (isequal (gn, {'low'; 'med'; 'high'})); +%! assert (isequal (gl, categorical ({'low'; 'med'; 'high'}))); + +%!test +%! if (! exist ('categorical', 'file')) +%! return; +%! endif +%! s = categorical ({'a','b','c'}); +%! s(:) = categorical (missing); +%! [g, gn, gl] = grp2idx (s); +%! assert (isequaln (g, [NaN; NaN; NaN])); +%! assert (isempty (gn)); +%! assert (isequal (gl, categorical (cell (0,1)))); + +%!test +%! if (! exist ('categorical', 'file')) +%! return; +%! endif +%! s = categorical ({'a','b','c'}); +%! s(:) = categorical (missing); +%! [g, gn, gl] = grp2idx (s); +%! assert (isequaln (g, [NaN; NaN; NaN])); +%! assert (isempty (gn)); +%! assert (isequal (gl, categorical (cell (0,1)))); + +%!test +%! if (! exist ('string', 'file')) +%! return; +%! endif +%! s = string ({missing, missing}); +%! [g, gn, gl] = grp2idx (s); +%! assert (isequaln (g, [NaN; NaN])); +%! assert (isempty (gn)); +%! assert (isequal (gl, string (cell (0,1))));