[5] | 1 | %GETILAB retrieve identifier values given identifier names or indices |
---|
| 2 | % |
---|
| 3 | % LABS=GETILAB(A,REF,J) |
---|
| 4 | % |
---|
| 5 | % INPUT |
---|
| 6 | % A input dataset with ilab structure (see ENABLEILAB) |
---|
| 7 | % REF name, cell array with names or numerical indices of |
---|
| 8 | % identifier columns |
---|
| 9 | % J indices specifying examples to be considered (optional) |
---|
| 10 | % |
---|
| 11 | % OUTPUT |
---|
| 12 | % VALUES identifier values. If all identifiers are numerical, matrix is |
---|
| 13 | % returned, otherwise cell array. |
---|
| 14 | % |
---|
| 15 | % DESCRIPTION |
---|
| 16 | % GETILAB returns values of identifiers, specified by names or numerical |
---|
| 17 | % indices. This function requires that the dataset supports |
---|
| 18 | % named-identifiers (see ENABLEILAB). Optional vector J specifies subset |
---|
| 19 | % of examples to be considered. |
---|
| 20 | % |
---|
| 21 | % SEE ALSO |
---|
| 22 | % ENABLEILAB, REMOVEILAB, GETILAB, SETILAB, GETILABLIST |
---|
| 23 | |
---|
| 24 | % $Id: getilab.m,v 1.4 2005/05/03 13:00:39 serguei Exp $ |
---|
| 25 | |
---|
| 26 | function labs=getilab(a,ref,J) |
---|
| 27 | |
---|
| 28 | isvalidilab(a); |
---|
| 29 | |
---|
| 30 | if ~exist('ref','var') | (exist('ref','var') & isempty(ref)) |
---|
| 31 | % retrieve all identifiers |
---|
| 32 | ref=1:length(a.user.ilab.names); |
---|
| 33 | end |
---|
| 34 | |
---|
| 35 | if ~exist('J','var') |
---|
| 36 | J=1:size(a,1); |
---|
| 37 | end |
---|
| 38 | |
---|
| 39 | % get the column to be returned |
---|
| 40 | |
---|
| 41 | col=[]; |
---|
| 42 | if isnumeric(ref) |
---|
| 43 | col=ref; |
---|
| 44 | else |
---|
| 45 | if ischar(ref) |
---|
| 46 | ref={ref}; % turn it into cell array |
---|
| 47 | end |
---|
| 48 | if ~iscell(ref) |
---|
| 49 | error('numerical index, name or cell array of names expected') |
---|
| 50 | end |
---|
| 51 | % we know ref is a cell array |
---|
| 52 | for i=1:length(ref) |
---|
| 53 | ind=strcmp(a.user.ilab.names,ref{i}); |
---|
| 54 | if sum(ind)==0 |
---|
| 55 | error(['identifier label ''' ref{i} ''' not defined!']); |
---|
| 56 | end |
---|
| 57 | col=[col find(ind==1)]; |
---|
| 58 | end |
---|
| 59 | end |
---|
| 60 | |
---|
| 61 | if max(col)>size(a.user.ilab.names,2) |
---|
| 62 | error('index exceeds number of defined ident labels'); |
---|
| 63 | end |
---|
| 64 | |
---|
| 65 | % retrieve ident labels |
---|
| 66 | labs=a.ident(J,col); |
---|
| 67 | % if possible, convert the ilabs into numerical output |
---|
| 68 | try |
---|
| 69 | labs = cell2mat(labs); |
---|
| 70 | % check if the cell array contained single objects |
---|
| 71 | if any(size(labs) ~= [length(J), length(col)]); |
---|
| 72 | labs = a.ident(J,col); |
---|
| 73 | end |
---|
| 74 | catch |
---|
| 75 | end |
---|
| 76 | |
---|
| 77 | return |
---|