2017-04-18 157 views
1

意外崩溃我试图运行下面的递归一行一行地操作,以获得norm_vecRcpp |大数据

#include <Rcpp.h> 
#ifdef _OPENMP 
#include <omp.h> // OpenMP header 
#endif 

using namespace Rcpp; 
using namespace std; 

// [[Rcpp::export]] 
NumericVector sim1(NumericVector X) { 

    int T = X.length(); 
    NumericVector norm_vec = NumericVector(T); 

    norm_vec[0] = 0; 

    int i = 1; 

    while (i <= T) { 

    NumericVector sim_vec = NumericVector(i); 
    NumericVector weight_vec = NumericVector(i); 
    NumericVector norm = NumericVector(i); 

    int j = 0; 
    double sim_vec_sum = 0; 

    while (j <= i) { 

     sim_vec[j] = exp(-abs(X[i] - X[i-j-1])); 
     sim_vec_sum += sim_vec[j]; 
     j++; 

    } 

    j = 0; 
    double norm_sum = 0; 

    while (j <= i) { 

     weight_vec[j] = sim_vec[j]/sim_vec_sum; 
     norm[j] = X[j]*weight_vec[j]; 
     norm_sum += norm[j]; 
     j++; 

    } 

    norm_vec[i] = norm_sum; 

    i++; 

    } 

    return norm_vec; 

} 

调用上面sourceCpp("sim1.cpp")的代码,我想获得sim1(rnorm(n))。而代码工作得很好,更小的n,R完全关闭,一旦n得到超过19.

我对cpp不太舒服 - 可能我犯了一个基本的错误。非常感谢你的帮助!

回答

2

循环中的R从去到1T,但在C/C++他们去从0T-1

在你的循环i上升到T,并j上升到i。这种方式i可以达到T,这是最大的T-1

+0

非常感谢您的帮助,安德烈! – jayc