From: <cde...@us...> - 2010-12-08 11:30:22
|
Revision: 7996 http://octave.svn.sourceforge.net/octave/?rev=7996&view=rev Author: cdemills Date: 2010-12-08 11:30:15 +0000 (Wed, 08 Dec 2010) Log Message: ----------- Fixed a few issues when the dataframe was initialised from a 3D array Modified Paths: -------------- trunk/octave-forge/extra/dataframe/inst/@dataframe/find.m trunk/octave-forge/extra/dataframe/inst/@dataframe/permute.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper2.m trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_pad.m trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/find.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/find.m 2010-12-08 09:24:23 UTC (rev 7995) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/find.m 2010-12-08 11:30:15 UTC (rev 7996) @@ -29,8 +29,9 @@ resu = []; mz = max(cellfun(@length, df._rep)); for indc = 1:df._cnt(2), [indr, inds] = feval(@find, df._data{indc}(:, df._rep{indc})); - resu = [resu; sub2ind([df._cnt(1:2) mz], indr, \ - repmat(indc, [length(indr) 1]), inds)]; + %# create a vector the same size as indr + dummy = indr; dummy(:) = indc; + resu = [resu; sub2ind([df._cnt(1:2) mz], indr, dummy, inds)]; endfor varargout{1} = sort(resu); case 2 Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/permute.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/permute.m 2010-12-08 09:24:23 UTC (rev 7995) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/permute.m 2010-12-08 11:30:15 UTC (rev 7996) @@ -24,6 +24,8 @@ %# $Id$ %# - resu = df_mapper2(@permute, df, varargin{:}); + %# resu = df_mapper2(@permute, df, varargin{:}); + resu = permute(df_whole(df), varargin{:}); + endfunction Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper2.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper2.m 2010-12-08 09:24:23 UTC (rev 7995) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_mapper2.m 2010-12-08 11:30:15 UTC (rev 7996) @@ -30,10 +30,19 @@ dim = 1; resu = []; vout = varargin; - if (!isempty(varargin) && isnumeric(varargin{1})), - dim = varargin{1}; - %# the "third" dim is the second on stored data - if 3 == dim, vout(1) = 2; endif + %# take care of constructs as min(x, [], dim) + if (!isempty(varargin)), + indk = 1; while indk <= length(varargin), + if (isnumeric(varargin{indk})), + if (isempty(varargin{indk})), + indk = indk + 1; continue; + endif + dim = varargin{indk}; + %# the "third" dim is the second on stored data + if 3 == dim, vout(indk) = 2; endif + endif + break; + endwhile endif switch(dim) Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_pad.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_pad.m 2010-12-08 09:24:23 UTC (rev 7995) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/private/df_pad.m 2010-12-08 11:30:15 UTC (rev 7996) @@ -146,9 +146,13 @@ case { 'double' } dummy = horzcat(df._data{indi}(:, df._rep{indi}), \ repmat(NA, df._cnt(1), 1)); + case { 'logical' } + %# there is no logical 'NA' -- fill empty elems with false + dummy = horzcat(df._data{indi}(:, df._rep{indi}), \ + repmat(false, df._cnt(1), 1)); otherwise - dummy = cast(horizcat(df._data{indi}(:, df._rep{indi}), \ - repmat(NA, df._cnt(1), 1)), \ + dummy = cast(horzcat(df._data{indi}(:, df._rep{indi}), \ + repmat(NA, df._cnt(1), 1)), \ df._type{indi}); endswitch df._data{indi} = dummy; Modified: trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m =================================================================== --- trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2010-12-08 09:24:23 UTC (rev 7995) +++ trunk/octave-forge/extra/dataframe/inst/@dataframe/subsref.m 2010-12-08 11:30:15 UTC (rev 7996) @@ -219,7 +219,17 @@ [indc, ncol, S(1).subs{2}] = \ df_name2idx(df._name{2}, S(1).subs{2}, df._cnt(2), 'column'); if (max(indc) > df._cnt(2)), - error("Accessing dataframe past end of columns"); + %# is it a two index access of a 3D structure ? + if (length(df._cnt) > 2), + [fullindc, fullinds] = ind2sub(df._cnt(2:3), indc); + if (fullindc <= df._cnt(2)), + indc = fullindc; inds = fullinds; + endif + endif + %# retest + if (max(indc) > df._cnt(2)), + error("Accessing dataframe past end of columns"); + endif endif else %# one single dim -- probably something like df(:), df(A), ... This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |