[R-br] R e C++

ctrucios ctrucios em gmail.com
Sábado Janeiro 19 16:02:49 BRST 2013


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 em gmail.com
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20130119/1aee0d12/attachment.html>


Mais detalhes sobre a lista de discussão R-br