Mercurial > hg > camir-aes2014
diff toolboxes/MIRtoolbox1.3.2/somtoolbox/som_table_modify.m @ 0:e9a9cd732c1e tip
first hg version after svn
author | wolffd |
---|---|
date | Tue, 10 Feb 2015 15:05:51 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_table_modify.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,91 @@ +function sT = som_table_modify(sT,action,arg1,arg2,arg3) + +%SOM_TABLE_MODIFY Modify table: add or remove columns or rows. +% +% sTable = som_table_modify(sTable,action,arg1,[arg2],[arg3]) +% +% Input and output arguments ([]'s are optional): +% sTable (struct) table struct +% action (string) action id (see below). +% arg1 (varies) Depending on action, 1 to 3 arguments +% [arg2] (varies) are needed. See below. +% [arg3] (varies) +% +% sTable (struct) the modified table struct +% +% Actions and their arguments: +% 'addcol' Add one or several new columns. +% arg1 (cell array) new values +% (char) new values (a single column can be given) +% (matrix) new values +% arg2 (cell array) new headers +% arg3 (scalar) at which position the new columns +% should be inserted (at the end by default) +% 'addrow' Add one or several new rows. +% arg1 (cell array) new values +% (char) new values (a single row can be given) +% (matrix) new values +% arg2 (scalar) at which position the new rows +% should be inserted (at the end by default) +% 'removecol' Remove one or several columns. +% arg1 (vector) indeces of columns to be removed +% 'removerow' Remove one or several rows. +% arg1 (vector) indeces of rows to be removed +% +% See also SOM_TABLE_STRUCT, SOM_TABLE_PRINT. + +% Contributed to SOM Toolbox 2.0, January 4th, 2002 by Juha Vesanto +% Copyright (c) by Juha Vesanto +% http://www.cis.hut.fi/projects/somtoolbox/ + +% Version 2.0beta juuso 040102 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[nrT,ncT] = size(sT.values); + +switch action, + case 'addcol', + values = arg1; + if ischar(values), values = cellstr(values); end + if isnumeric(values), values = num2cell(values); end + spans = ones([size(values) 2]); + [nr,nc] = size(values); + if nargin<4, header = cell(1,nc); header(:) = {''}; else header = arg2; end + if ischar(header), header = cellstr(header); end + if nargin<5, where = ncT+1; else where = arg3; end + if nrT ~= nr, + error('Mismatch between sizes of given table and additional columns') + else + sT.headers = [sT.headers(:,1:where-1), header, sT.headers(:,where:end)]; + sT.values = [sT.values(:,1:where-1), values, sT.values(:,where:end)]; + sT.span = [sT.span(:,1:where-1,:), spans, sT.span(:,where:end,:)]; + end + case 'addrow', + values = arg1; + if ischar(values), values = cellstr(values); end + if isnumeric(values), values = num2cell(values); end + [nr,nc] = size(values); + spans = ones([size(values) 2]); + if nargin<4, where = nrT+1; else where = arg2; end + if ncT ~= nc, + error('Mismatch between sizes of given table and additional rows') + else + sT.values = [sT.values(1:where-1,:); values; sT.values(where:end,:)]; + sT.span = [sT.span(1:where-1,:,:); spans; sT.span(where:end,:,:)]; + end + case 'removecol', + where = setdiff(1:ncT,arg1); + sT.values = sT.values(:,where); + sT.headers = sT.headers(:,where); + sT.span = sT.span(:,where,:); + case 'removerow', + where = setdiff(1:nrT,arg1); + sT.values = sT.values(where,:); + sT.headers = sT.headers(where,:); + sT.span = sT.span(where,:,:); +end + +return; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%