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