RcppArmadillo :: sample函数导致RStudio和R崩溃

时间:2014-04-10 23:10:06

标签: r rcpp armadillo

在使用RcppArmadillo :: sample函数时,我发现使用大输入向量会导致RStudio崩溃。我提供以下完整代码:

#include<iostream>
#include <armadillo>
#include <RcppArmadilloExtensions/sample.h>
//[[Rcpp::depends(RcppArmadillo)]]

using namespace std;
using namespace Rcpp;
using namespace arma;

//[[Rcpp::export]]
IntegerVector test_func(int N) {
    IntegerVector frame = Range(1, N);
    NumericVector wts = runif(N, 0, 1);
    NumericVector Wts = wts / sum(wts);

    IntegerVector y = RcppArmadillo::sample(frame, N,TRUE, Wts );
    return y;
}

调用test_func(N=100)会产生正确的结果。但N大于200,例如test_func(N=210),会导致RStudio和RConsole崩溃。我正在犯错吗?

1 个答案:

答案 0 :(得分:3)

我不能复制这个。无论是直接的R ression还是在RStudio里面它都适合我。

我对您的代码做了一些小修改:

// the following header also include Rcpp and Armadillo headers
#include <RcppArmadilloExtensions/sample.h>

//[[Rcpp::depends(RcppArmadillo)]]

//[[Rcpp::export]]
Rcpp::IntegerVector test_func(int N) {
    Rcpp::IntegerVector frame = Rcpp::Range(1, N);
    Rcpp::NumericVector wts = Rcpp::runif(N, 0.0, 1.0);
    return Rcpp::RcppArmadillo::sample(frame, N, true, wts / Rcpp::sum(wts));
}

但这些都不应该是重要的。

注意如果sample()变大,N函数的代码将如何引发激活:

if (walker_test < 200) { 
    ProbSampleReplace<IntegerVector>(index, nOrig, size, prob);
} else {
    throw std::range_error("Walker Alias method not implemented. [...]");
}

所以我认为你可能会看到R,Rcpp,RcppArmadillo之间不匹配的花园种类错误。你在什么平台上?因为Linux是重新编译包的。