Вот определение этой функции из заголовка:
// Enables supplying an arma probability
template <class T>
T sample(const T &x, const int size, const bool replace, arma::vec &prob_){
return sample_main(x, size, replace, prob_);
}
Обратите внимание, что она ожидает arma::vec == arma::colvec
, пока вы предоставляете arma::rowvec
.Так что это должно работать, если вы измените p0
и alph
на arma::vec
.Не проверено из-за отсутствия данных примера ...
Кстати, есть также функция Rcpp:::sample()
на тот случай, если вам не нужен Armadillo для других задач.
Относительно вопросов производительности, поднятых @JosephWood в комментариях: у меня сложилось впечатление, что оба Rcpp::sample()
и Rcpp::RcppArmadillo::sample()
основаны на do_sample()
.Так что в большинстве случаев они должны быть очень похожими, но я их не сравнивал.Более высокая производительность R для невзвешенной выборки без замены на большие числа обеспечивается алгоритмом хеширования , который в таких случаях выбирается на уровне R .Также интересно отметить, что R 3.6 будет иметь новый метод отбора проб, чтобы устранить смещение, присутствующее в текущем методе.