diff --git a/src/@dseries/subsref.m b/src/@dseries/subsref.m index fa9ec6eaab53c584b37b265477058258cbda1def..96954946df0c994878a8bcbbc4133db84bdcc2df 100644 --- a/src/@dseries/subsref.m +++ b/src/@dseries/subsref.m @@ -88,7 +88,7 @@ switch S(1).type case 'length' error(['dseries::subsref: we do not support the length operator on ' ... 'dseries. Please use ''nobs'' or ''vobs''']); - case 'save' + case 'save' % Save dseries object on disk (default is a mat file). B = NaN; if isequal(length(S),2) @@ -219,6 +219,7 @@ switch S(1).type B = A; end elseif isdates(S(1).subs{1}) || isdate(S(1).subs{1}) + % Select observation(s) with date(s) if isdate(S(1).subs{1}) Dates = dates(S(1).subs{1}); else @@ -236,8 +237,27 @@ switch S(1).type B = copy(A); B.data = B.data(tdx,:); B.dates = B.dates(tdx); - elseif isvector(S(1).subs{1}) && all(isint(S(1).subs{1})) - error('dseries::subsref: It is not possible to select observations with a vector of integers. You have to index with a dates object instead!'); + elseif isnumeric(S(1).subs{1}) && isequal(ndims(S(1).subs{1}), 2) + if isempty(A) + % Populate an empty dseries object. + if isempty(A.dates) + B = copy(A); + B.dates = dates('1Y'):dates('1Y')+(rows(S(1).subs{1})-1); + B.data = S(1).subs{1}; + B.name = default_name(columns(B.data)); + B.tex = name2tex(B.name); + B.ops = cell(length(B.name), 1); + else + B = copy(A); + B.dates = B.dates:B.dates+(rows(S(1).subs{1})-1); + B.data = S(1).subs{1}; + B.name = default_name(columns(B.data)); + B.tex = name2tex(B.name); + B.ops = cell(length(B.name), 1); + end + else + error('dseries::subsref: It is not possible to populate a non empty dseries object!'); + end else error('dseries::subsref: I have no idea of what you are trying to do!') end @@ -694,4 +714,38 @@ return end T = all(t); -%@eof:17 \ No newline at end of file +%@eof:17 + +%@test:18 + try + tseries = dseries(); + ts = tseries(ones(10,1)); + t(1) = true; + catch + t(1) = false; + end + + if t(1) + t(2) = ts.dates(1)==dates('1Y'); + t(3) = ts.dates(10)==dates('10Y'); + end + + T = all(t); +%@eof:18 + +%@test:19 + try + tseries = dseries(dates('2000Q1')); + ts = tseries(ones(5,1)); + t(1) = true; + catch + t(1) = false; + end + + if t(1) + t(2) = ts.dates(1)==dates('2000Q1'); + t(3) = ts.dates(5)==dates('2001Q1'); + end + + T = all(t); +%@eof:19 \ No newline at end of file