gusucode.com > bigdata 工具箱 matlab源码程序 > bigdata/@tall/categorical.m

    function tc = categorical(tdata,varargin)
%CATEGORICAL Create a tall categorical array.
%   Supported syntaxes:
%   C = CATEGORICAL(DATA)
%   C = CATEGORICAL(DATA,VALUESET)
%   C = CATEGORICAL(DATA,VALUESET,CATEGORYNAMES)
%   C = CATEGORICAL(DATA, ..., 'Ordinal',ORD)
%   C = CATEGORICAL(DATA, ..., 'Protected',PROTECT)
%
%   LIMITATION:
%   The order of the categories when executing C = CATEGORICAL(DATA) is
%   undefined. Use VALUESET and CATEGORYNAMES to enforce the order.
%
%   See also CATEGORICAL.

%   Copyright 2016 The MathWorks, Inc.

narginchk(1,7);
if nargin == 1 || isUsingOrdinalOrProtected(varargin{1})
    % The order of the categories created by a tall array is undefined.
    tc = elementfun(@categorical, tdata);
    tc.Adaptor = matlab.bigdata.internal.adaptors.CategoricalAdaptor();
    ec = chunkfun(@(x)x([]), tc);
    ec.Adaptor = matlab.bigdata.internal.adaptors.CategoricalAdaptor();
    tcategories = clientfun(@categories, ec);
    % Ensure same categories.
    tc = elementfun(@setcats, tc, matlab.bigdata.internal.broadcast(tcategories));
    tc.Adaptor = matlab.bigdata.internal.adaptors.CategoricalAdaptor();
    if nargin > 1
        tc = mycategorical(tc, varargin{:});
    end
else
    tc = mycategorical(tdata, varargin{:});
end
end

function tf = isUsingOrdinalOrProtected(x)
tf = ischar(x) && (strcmpi('Ordinal', x) || strcmpi('Protected', x));
end

function tc = mycategorical(tdata,varargin)
vars = cellfun(@matlab.bigdata.internal.broadcast, varargin, 'UniformOutput', false);
tc = elementfun(@categorical, tdata, vars{:});
tc.Adaptor = matlab.bigdata.internal.adaptors.CategoricalAdaptor();
end