从犰狳矢量生成随机索引

时间:2018-04-02 08:36:37

标签: rcpp armadillo

我希望从给定的犰狳矢量(使用R的Rcpp接口)生成随机索引。我正在使用的功能如下:

#include <RcppArmadillo.h>
#include <RcppArmadilloExtensions/sample.h>

using namespace Rcpp;

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

// [[Rcpp::export]]
int index_rand(arma::vec& v) {

  arma::uvec indices; 

  for (size_t i = 0; i < v.n_elem; ++i) {

    indices[i] = i;

  }

  arma::uvec u = RcppArmadillo::sample(indices, 1, false);
  return u[0];
}

但是,此代码符合但在运行时崩溃了R解释器:

index_rand(1:10)

1 个答案:

答案 0 :(得分:0)

事实证明这是解决here的棘手问题。后人的答案如下。

// [[Rcpp::export]]
int index_rand(arma::vec& v) {

  arma::uvec indices = arma::linspace<arma::uvec>(0, v.n_elem-1, v.n_elem); 

  arma::uvec u = RcppArmadillo::sample(indices, 1, false);
  return (int)u[0];
}