我有一个Rcpp脚本,我在其中执行以下操作:
double m = runif(1); // generate a random number uniformly between 0 and 1.
然后我将m传递给sample(),如下所示:
IntegerVector ind = RcppArmadillo::sample<IntegerVector>(perms, ceil(num_specs * m), false); // int perms, num_specs.
以上行导致错误:
error: no viable conversion from 'NumericVector' (aka 'Vector<14>') to 'double'
除非我的思考(或声明)有缺陷,否则runif(1)是标量(double)而不是向量(NumericVector)。
当我声明时,上述工作正常:
double m = 0;
有人可以指出如何解决runif()的问题?
看看RcppArmadillo头目录中的RcppArmadilloExtensions/
目录 - 有一个完整的sample()
示例设置为RcppArmadillo。
还有
以及使用它进行采样的示例。
否则你的问题可能是混淆标量R::runif()
(使用R的C API)和矢量化的Rcpp::runif()
返回一个向量。如果你更清楚你使用哪一个(即使用::
显式命名空间),你的代码仍然可以工作。