我們一直在使用sample
函數從RcppArmadillo
隨機抽樣一個NumericVector
對象。但是,我們注意到在犰狳類型上不可能使用相同的功能(vec
或uvec
)。我們已經看了sample.h
文件中的函數定義,它看起來像一個模板化的函數,應該能夠處理這些類型,但是我們還沒有能夠弄清楚如何使它與Armadillo類一起工作而沒有做很多來自Rcpp
庫的NumericVector
或IntegerVector
類型的轉換。RcppArmadillo樣本上犰狳矢量類
例如,我們將此函數寫入一個名爲try.cpp
的文件中。
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
#include <RcppArmadilloExtensions/sample.h>
using namespace arma;
using namespace Rcpp;
// [[Rcpp::export]]
arma::uvec sample_index(const int &size){
arma::uvec sequence = linspace<uvec>(0, size-1, size);
arma::uvec out = sample(sequence, size, false);
return out;
}
運行上面的代碼產生了以下錯誤:
src/try.cpp|11 col 22 error| no matching function for call to 'sample' [cpp/gcc]
~/Library/R/3.3/library/Rcpp/include/Rcpp/sugar/functions/sample.h|401 col 1 error| note: candidate function not viable: no known conversion from 'arma::uvec' (aka 'Col<unsigned int>') to 'int' for 1st argument [cpp/gcc]
~/Library/R/3.3/library/Rcpp/include/Rcpp/sugar/functions/sample.h|437 col 1 error| note: candidate template ignored: could not match 'Vector' against 'Col' [cpp/gcc]
任何幫助,將不勝感激:)
您能否快速確認RcppArmadillo的版本是最新的? 'sessionInfo()'> = 7.6 – coatless
'sessionInfo()'的輸出:'RcppArmadillo_0.7.700.0.0' –
作爲第一步(防禦),撤銷'using namespace ...',因爲我們現在有_two_'sample'函數。 –