
Pessoal aqui fiz alguma coisa para passar parte de um código em c++. Para que seja reproduzível deixo o código aqui: *# Codigo em R* library(Rcpp) nbur = 10 nobs = 10 ntot = nbur + nobs eboot = rnorm(ntot) d = 2 p = 1 q= 2 garchorder = c(p,q) aux3 = cumsum(garchorder) coeff = c(0.01,0.1,0.7,0.1) aux1 = 0.01/(1-0.1-0.7-0.1) s2_boot = y_boot = c() aux2 = sqrt(aux1) s2_boot[1:d] = aux1 y_boot[1:d]=eboot[1:d]*aux2 for (m in (d+1):ntot){ s2_boot[m] = coeff[1] + sum(coeff[2:(p+1)]*y_boot[m - (1:p)]^2) + sum(coeff[(p+2):(aux3[2]+1)]*s2_boot[m - (1:q)]) y_boot[m]=eboot[m]*sqrt(s2_boot[m]) } y_boot * * * * *Utilizando o codigo em C++ consegui que faça a mesma coisa, só que quero saber se os 2 for que utilizo para obter s1 e s2 ** podem ser subtituidos por outras funções (mais diretas já prontas do C) para não utilizar for.* * * *Deixo aqui como faço para chamar utilizando o Rcpp a função em C++* sourceCpp("sbootgarch.cpp") teste1 = sbootgarch(d, aux3, aux1, eboot, coeff, p, q) # Codigo em C++ #include <Rcpp.h> using namespace Rcpp; // [[Rcpp::export]] NumericVector sbootgarch(int d, NumericVector aux3, double aux1, NumericVector eboot, NumericVector coeff, int p, int q) { int ntot = eboot.size(); NumericVector y_boot(ntot), s2_boot(ntot); double s1=0,s2=0,aux2 = sqrt(aux1); for(int n=0; n<d; n++){ s2_boot[n] = aux1; y_boot[n] = eboot[n]*aux2; } for(int m=d; m<ntot+1; m++){ s1 = 0; s2 = 0; * for(int k=1; k<p+1;k++) s1 += coeff[k]*pow(y_boot[m-k],2);* * for(int l=1; l<q+1;l++) s2+= coeff[p+l]*s2_boot[m - l];* s2_boot[m] = coeff[0] + s1 + s2; y_boot[m] = eboot[m]*sqrt(s2_boot[m]); } return y_boot; } Espero possam me ajudar Ps: Os for em azul são os que quero saber se podem ser subtituidos por outras funções. *Carlos Trucíos Maza ** : ctrucios@gmail.com