1
예기치 않은 충돌이 나는 norm_vec
를 얻기 위해 다음과 같은 재귀 행 단위 작업을 실행하려고 :Rcpp | 대용량 데이터
#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에별로 만족스럽지 않습니다. 아마도 기본적인 실수를했을 것입니다. 미리 도움을 주셔서 대단히 감사합니다!
감사합니다. Andrey! – jayc