Rcpp |大数据意外崩溃

时间:2017-04-18 01:05:49

标签: c++ r rcpp

我正在尝试运行以下递归的逐行操作来获取norm_vec

#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,但只要n超过19,R就会完全关闭。

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

1 个答案:

答案 0 :(得分:2)

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

在你的循环中i上升到Tj上升到i。这种方式i可以达到T,这超过T-1的最大值。