gusucode.com > bigdata 工具箱 matlab源码程序 > bigdata/+matlab/+bigdata/+internal/+util/calculateLocalSummary.m
function summaryInfo = calculateLocalSummary( localTable ) % Calculate summary information for a local piece of a partitioned table. % Output is a cell array containing one info struct per table variable. % Copyright 2016 The MathWorks, Inc. vars = localTable.Properties.VariableNames; summaryInfo = cell(1, numel(vars)); for idx = 1:numel(vars) var = localTable.(idx); if iscellstr(var) clz = 'cell string'; else clz = class(var); end info = struct('Name', vars{idx}, ... 'Size', size(var), ... 'Class', clz); if ismatrix(var) if isnumeric(var) || isduration(var) info = iAddDatatypeInfo(info, var, NaN, @isnan); elseif islogical(var) info = iAddLogicalInfo(info, var); elseif isa(var, 'categorical') info = iAddCategoricalInfo(info, var); elseif isa(var, 'datetime') info = iAddDatatypeInfo(info, var, NaT, @isnat); end end summaryInfo{idx} = info; end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Add info for numeric/datatime/duration types. function info = iAddDatatypeInfo(info, var, missingVal, isMissingFcn) %#ok<INUSL> eval! var = var(:); numMissing = sum(isMissingFcn(var)); % Here we rely on the fact that omitnan/omitnat is the default. minVal = min(var); maxVal = max(var); info.NumMissing = numMissing; info.MinVal = minVal; info.MaxVal = maxVal; info.MissingStr = strtrim(evalc('disp(missingVal)')); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function info = iAddLogicalInfo(info, var) info.true = sum(var(:)); info.false = numel(var) - info.true; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function info = iAddCategoricalInfo(info, var) var = var(:); numundef = sum(isundefined(var)); cats = categories(var); counts = countcats(var); % NB countcats may not necessarily return a column vector, so we force both % to be columns so that we don't attempt to add a row to a column later on % in the iAddCategoricalInfos call. See g1357299. cats = cats(:); counts = counts(:); if numundef > 0 cats{end+1,1} = categorical.undefLabel; counts(end+1,1) = numundef; end info.CategoricalInfo = { cats, counts }; if isordinal(var) info.Class = 'ordinal categorical'; end end