From 7ebbc41d8af472342f813b9891c1a5c992e96c44 Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Mon, 12 Oct 2015 15:20:15 +0200 Subject: [PATCH] Get rid of eval statements by using indirect indexing of structures --- matlab/GetPosteriorParametersStatistics.m | 2 +- matlab/PosteriorIRF.m | 24 ++++----- ...ional_variance_decomposition_mc_analysis.m | 22 ++++---- matlab/correlation_mc_analysis.m | 42 +++++++-------- matlab/covariance_mc_analysis.m | 54 +++++++++---------- matlab/variance_decomposition_mc_analysis.m | 20 +++---- 6 files changed, 81 insertions(+), 83 deletions(-) diff --git a/matlab/GetPosteriorParametersStatistics.m b/matlab/GetPosteriorParametersStatistics.m index f9bfedbd0..c51e0a2ba 100644 --- a/matlab/GetPosteriorParametersStatistics.m +++ b/matlab/GetPosteriorParametersStatistics.m @@ -389,6 +389,6 @@ oo.posterior_density.(type).(name) = density; function [post_mean,hpd_interval,post_var] = Extractoo(oo,name,type) hpd_interval = zeros(2,1); post_mean = oo.posterior_mean.(type).(name); -hpd_interval(1) = oo.posterior_hpdinf.(type).(name); +hpd_interval(1) = oo.posterior_hpdinf.(type).(name); hpd_interval(2) = oo.posterior_hpdsup.(type).(name); post_var = oo.posterior_variance.(type).(name); \ No newline at end of file diff --git a/matlab/PosteriorIRF.m b/matlab/PosteriorIRF.m index 8c094a24f..be4246100 100644 --- a/matlab/PosteriorIRF.m +++ b/matlab/PosteriorIRF.m @@ -304,12 +304,12 @@ clear STOCK_IRF_DSGE; for i = irf_shocks_indx for j = 1:nvar name = [deblank(M_.endo_names(IndxVariables(j),:)) '_' deblank(tit(i,:))]; - eval(['oo_.PosteriorIRF.dsge.Mean.' name ' = MeanIRF(:,j,i);']); - eval(['oo_.PosteriorIRF.dsge.Median.' name ' = MedianIRF(:,j,i);']); - eval(['oo_.PosteriorIRF.dsge.Var.' name ' = VarIRF(:,j,i);']); - eval(['oo_.PosteriorIRF.dsge.deciles.' name ' = DistribIRF(:,:,j,i);']); - eval(['oo_.PosteriorIRF.dsge.HPDinf.' name ' = HPDIRF(:,1,j,i);']); - eval(['oo_.PosteriorIRF.dsge.HPDsup.' name ' = HPDIRF(:,2,j,i);']); + oo_.PosteriorIRF.dsge.Mean.(name) = MeanIRF(:,j,i); + oo_.PosteriorIRF.dsge.Median.(name) = MedianIRF(:,j,i); + oo_.PosteriorIRF.dsge.Var.(name) = VarIRF(:,j,i); + oo_.PosteriorIRF.dsge.deciles.(name) = DistribIRF(:,:,j,i); + oo_.PosteriorIRF.dsge.HPDinf.(name) = HPDIRF(:,1,j,i); + oo_.PosteriorIRF.dsge.HPDsup.(name) = HPDIRF(:,2,j,i); end end @@ -341,12 +341,12 @@ if MAX_nirfs_dsgevar for i = irf_shocks_indx for j = 1:nvar name = [deblank(M_.endo_names(IndxVariables(j),:)) '_' deblank(tit(i,:))]; - eval(['oo_.PosteriorIRF.bvardsge.Mean.' name ' = MeanIRFdsgevar(:,j,i);']); - eval(['oo_.PosteriorIRF.bvardsge.Median.' name ' = MedianIRFdsgevar(:,j,i);']); - eval(['oo_.PosteriorIRF.bvardsge.Var.' name ' = VarIRFdsgevar(:,j,i);']); - eval(['oo_.PosteriorIRF.bvardsge.deciles.' name ' = DistribIRFdsgevar(:,:,j,i);']); - eval(['oo_.PosteriorIRF.bvardsge.HPDinf.' name ' = HPDIRFdsgevar(:,1,j,i);']); - eval(['oo_.PosteriorIRF.bvardsge.HPDsup.' name ' = HPDIRFdsgevar(:,2,j,i);']); + oo_.PosteriorIRF.bvardsge.Mean.(name) = MeanIRFdsgevar(:,j,i); + oo_.PosteriorIRF.bvardsge.Median.(name) = MedianIRFdsgevar(:,j,i); + oo_.PosteriorIRF.bvardsge.Var.(name) = VarIRFdsgevar(:,j,i); + oo_.PosteriorIRF.bvardsge.deciles.(name) = DistribIRFdsgevar(:,:,j,i); + oo_.PosteriorIRF.bvardsge.HPDinf.(name) = HPDIRFdsgevar(:,1,j,i); + oo_.PosteriorIRF.bvardsge.HPDsup.(name) = HPDIRFdsgevar(:,2,j,i); end end end diff --git a/matlab/conditional_variance_decomposition_mc_analysis.m b/matlab/conditional_variance_decomposition_mc_analysis.m index 2c724083a..c165a62be 100644 --- a/matlab/conditional_variance_decomposition_mc_analysis.m +++ b/matlab/conditional_variance_decomposition_mc_analysis.m @@ -62,11 +62,11 @@ end name = [ var_list(endogenous_variable_index,:) '.' exo ]; if isfield(oo_, [ TYPE 'TheoreticalMoments' ]) - eval(['temporary_structure = oo_.' TYPE 'TheoreticalMoments;']) + temporary_structure = oo_.([TYPE 'TheoreticalMoments']); if isfield(temporary_structure,'dsge') - eval(['temporary_structure = oo_.' TYPE 'TheoreticalMoments.dsge;']) + temporary_structure = oo_.([TYPE 'TheoreticalMoments']).dsge; if isfield(temporary_structure,'ConditionalVarianceDecomposition') - eval(['temporary_structure = oo_.' TYPE 'TheoreticalMoments.dsge.ConditionalVarianceDecomposition.Mean;']) + temporary_structure = oo_.([TYPE 'TheoreticalMoments']).dsge.ConditionalVarianceDecomposition.Mean; if isfield(temporary_structure,name) if sum(Steps-temporary_structure.(name)(1,:)) == 0 % Nothing (new) to do here... @@ -112,13 +112,13 @@ for i=1:length(Steps) p_hpdinf(i) = hpd_interval(1); p_hpdsup(i) = hpd_interval(2); end -eval(['oo_.' TYPE 'TheoreticalMoments.dsge.ConditionalVarianceDecomposition.Steps = Steps;']); -eval(['oo_.' TYPE 'TheoreticalMoments.dsge.ConditionalVarianceDecomposition.Mean.' name ' = p_mean;']); -eval(['oo_.' TYPE 'TheoreticalMoments.dsge.ConditionalVarianceDecomposition.Median.' name ' = p_median;']); -eval(['oo_.' TYPE 'TheoreticalMoments.dsge.ConditionalVarianceDecomposition.Variance.' name ' = p_variance;']); -eval(['oo_.' TYPE 'TheoreticalMoments.dsge.ConditionalVarianceDecomposition.HPDinf.' name ' = p_hpdinf;']); -eval(['oo_.' TYPE 'TheoreticalMoments.dsge.ConditionalVarianceDecomposition.HPDsup.' name ' = p_hpdsup;']); -eval(['oo_.' TYPE 'TheoreticalMoments.dsge.ConditionalVarianceDecomposition.deciles.' name ' = p_deciles;']); +oo_.([TYPE 'TheoreticalMoments']).dsge.ConditionalVarianceDecomposition.Steps = Steps; +oo_.([TYPE 'TheoreticalMoments']).dsge.ConditionalVarianceDecomposition.Mean.(name) = p_mean; +oo_.([TYPE 'TheoreticalMoments']).dsge.ConditionalVarianceDecomposition.Median.(name) = p_median; +oo_.([TYPE 'TheoreticalMoments']).dsge.ConditionalVarianceDecomposition.Variance.(name) = p_variance; +oo_.([TYPE 'TheoreticalMoments']).dsge.ConditionalVarianceDecomposition.HPDinf.(name) = p_hpdinf; +oo_.([TYPE 'TheoreticalMoments']).dsge.ConditionalVarianceDecomposition.HPDsup.(name) = p_hpdsup; +oo_.([TYPE 'TheoreticalMoments']).dsge.ConditionalVarianceDecomposition.deciles.(name) = p_deciles; if options_.estimation.moments_posterior_density.indicator - eval(['oo_.' TYPE 'TheoreticalMoments.dsge.ConditionalVarianceDecomposition.density.' name ' = p_density;']); + oo_.([TYPE 'TheoreticalMoments']).dsge.ConditionalVarianceDecomposition.density.(name) = p_density; end \ No newline at end of file diff --git a/matlab/correlation_mc_analysis.m b/matlab/correlation_mc_analysis.m index 28a5c1af7..def6c94a9 100644 --- a/matlab/correlation_mc_analysis.m +++ b/matlab/correlation_mc_analysis.m @@ -44,15 +44,15 @@ else end if isfield(oo_,[TYPE 'TheoreticalMoments']) - eval(['temporary_structure = oo_.' TYPE 'TheoreticalMoments;']) + temporary_structure = oo_.([TYPE, 'TheoreticalMoments']); if isfield(temporary_structure,'dsge') - eval(['temporary_structure = oo_.' TYPE 'TheoreticalMoments.dsge;']) + temporary_structure = oo_.([TYPE, 'TheoreticalMoments']).dsge; if isfield(temporary_structure,'correlation') - eval(['temporary_structure = oo_.' TYPE 'TheoreticalMoments.dsge.correlation.Mean;']) + temporary_structure = oo_.([TYPE, 'TheoreticalMoments']).dsge.correlation.Mean; if isfield(temporary_structure,deblank(var1)) - eval(['temporary_structure_1 = oo_.' TYPE 'TheoreticalMoments.dsge.correlation.Mean.' var1 ';']) + temporary_structure_1 = oo_.([TYPE, 'TheoreticalMoments']).dsge.correlation.Mean.(var1); if isfield(temporary_structure_1,deblank(var2)) - eval(['temporary_structure_2 = temporary_structure_1.' var2 ';']) + temporary_structure_2 = temporary_structure_1.(var2); l1 = length(temporary_structure_2); if l1