From 84522ce87ffdfcd38178981ec104e7d44a1f44bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Wed, 3 Jul 2013 11:59:52 +0200 Subject: [PATCH] Fixed bug in @dynSeries/subsasgn that pops up when length(S) is equal to two and S(1).type is a dot. Allows Syntax like: ts.A1(rg) = B where ts is a dynSeries object, A1 is a variable in the database, rg is a dynDates object and B an array of doubles. --- matlab/@dynSeries/subsasgn.m | 39 ++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/matlab/@dynSeries/subsasgn.m b/matlab/@dynSeries/subsasgn.m index 0dd3d84aa..054a81547 100644 --- a/matlab/@dynSeries/subsasgn.m +++ b/matlab/@dynSeries/subsasgn.m @@ -148,7 +148,11 @@ switch length(S) case 2 merge_dynSeries_objects = 0; if ((isequal(S(1).type,'{}') || isequal(S(1).type,'.')) && isequal(S(2).type,'()')) - sA = extract(A,S(1).subs{:}); + if isequal(S(1).type,'{}') + sA = extract(A,S(1).subs{:}); + else + sA = extract(A,S(1).subs); + end if (isa(B,'dynSeries') && isequal(sA.vobs,B.vobs)) || (isnumeric(B) && isequal(sA.vobs,columns(B))) if isa(S(2).subs{1},'dynDates') || isa(S(2).subs{1},'dynDate') [junk, tdx] = intersect(sA.time.time,S(2).subs{1}.time,'rows'); @@ -524,4 +528,35 @@ end %$ t(7) = dyn_assert(ts1.data,[[A(1:2,1); B(3:7); A(8:end,1)], A(:,2:3)],1e-15); %$ end %$ T = all(t); -%@eof:13 \ No newline at end of file +%@eof:13 + +%@test:14 +%$ % Define a datasets. +%$ A = rand(40,3); B = rand(40,1); +%$ +%$ % Instantiate two dynSeries object. +%$ ts1 = dynSeries(A,'1950Q1',{'A1';'A2';'A3'},[]); +%$ ts2 = dynSeries(B,'1950Q1',{'B1'},[]); +%$ +%$ % modify first object. +%$ try +%$ d1 = dynDate('1950Q3'); +%$ d2 = dynDate('1951Q3'); +%$ rg = d1:d2; +%$ ts1.A1(rg) = B(3:7); +%$ t(1) = 1; +%$ catch +%$ t(1) = 0; +%$ end +%$ +%$ % Instantiate a time series object. +%$ if t(1) +%$ t(2) = dyn_assert(ts1.vobs,3); +%$ t(3) = dyn_assert(ts1.nobs,40); +%$ t(4) = dyn_assert(ts1.name{2},'A2'); +%$ t(5) = dyn_assert(ts1.name{1},'A1'); +%$ t(6) = dyn_assert(ts1.name{3},'A3'); +%$ t(7) = dyn_assert(ts1.data,[[A(1:2,1); B(3:7); A(8:end,1)], A(:,2:3)],1e-15); +%$ end +%$ T = all(t); +%@eof:14 \ No newline at end of file