Generates levels for a factor. Usage: f = gl( levels, m, n ); levels = a single scalar, p, or = a cell array of p strings {'F1', 'F2', ..., 'Fp'} for the level names, or = a string 'F', followed by a single scalar p, so that the call is gl( 'F', p, g, n ); the level names are 'F1', 'F2', ..., 'Fp'. m = number or repetitions of each level. n = length of the factor (number of observations). f = {'F1', 'F1', ..., 'F1' (repeated m times), 'F2', 'F2', ..., 'F2' (repeated m times), ... 'Fp', 'Fp', ..., 'Fp' (repeated m times), then all this is repeated until n observations are reached}. e.g. gl( 3, 2, 13 ) gives {'F1','F1','F2','F2','F3','F3','F1','F1','F2','F2','F3','F3','F1'} gl( 's', 3, 2, 13 ) gives {'s1','s1','s2','s2','s3','s3','s1','s1','s2','s2','s3','s3','s1'} gl( {'a','bb','c'}, 2, 13 ) gives { 'a', 'a','bb','bb', 'c', 'c', 'a', 'a','bb','bb', 'c', 'c', 'a'}
0001 function f = gl( varargin ); 0002 0003 %Generates levels for a factor. 0004 % 0005 % Usage: f = gl( levels, m, n ); 0006 % 0007 % levels = a single scalar, p, or 0008 % = a cell array of p strings {'F1', 'F2', ..., 'Fp'} for the level 0009 % names, or 0010 % = a string 'F', followed by a single scalar p, so that the call is 0011 % gl( 'F', p, g, n ); the level names are 'F1', 'F2', ..., 'Fp'. 0012 % m = number or repetitions of each level. 0013 % n = length of the factor (number of observations). 0014 % 0015 % f = {'F1', 'F1', ..., 'F1' (repeated m times), 0016 % 'F2', 'F2', ..., 'F2' (repeated m times), 0017 % ... 0018 % 'Fp', 'Fp', ..., 'Fp' (repeated m times), 0019 % then all this is repeated until n observations are reached}. 0020 % e.g. 0021 % gl( 3, 2, 13 ) gives 0022 % {'F1','F1','F2','F2','F3','F3','F1','F1','F2','F2','F3','F3','F1'} 0023 % 0024 % gl( 's', 3, 2, 13 ) gives 0025 % {'s1','s1','s2','s2','s3','s3','s1','s1','s2','s2','s3','s3','s1'} 0026 % 0027 % gl( {'a','bb','c'}, 2, 13 ) gives 0028 % { 'a', 'a','bb','bb', 'c', 'c', 'a', 'a','bb','bb', 'c', 'c', 'a'} 0029 0030 if isnumeric(varargin{1}) 0031 p=varargin{1}; 0032 m=varargin{2}; 0033 n=varargin{3}; 0034 for i=1:p 0035 levelnames{i}=['F' num2str(i)]; 0036 end 0037 end 0038 if iscell(varargin{1}) 0039 levelnames=varargin{1}; 0040 p=length(levelnames); 0041 m=varargin{2}; 0042 n=varargin{3}; 0043 end 0044 if isstr(varargin{1}) 0045 p=varargin{2}; 0046 m=varargin{3}; 0047 n=varargin{4}; 0048 for i=1:p 0049 levelnames{i}=[varargin{1} num2str(i)]; 0050 end 0051 end 0052 0053 [a,b,c]=ind2sub([m p ceil(n/(m*p))],1:n); 0054 f=levelnames(b)'; 0055 0056 return 0057 end 0058 0059 0060