在 RcppArmadillo 的 sample() 函数中使用 Rcpp 的 runif() 函数

Using Rcpp's runif() function within in RcppArmadillo's sample() function

我有一个 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) 是标量(双精度)而不是向量 (NumericVector)。

当我声明时以上工作正常:

double m = 0;

有人可以指出如何解决 runif() 的问题吗?

查看 RcppArmadillo 头目录中的 RcppArmadilloExtensions/ 目录 - 为 RcppArmadillo 设置了完整的 sample() 示例。

还有

使用它进行采样的示例。

否则,您的问题可能是将 标量 R::runif()(使用 R 的 C API)与 向量混淆 Rcpp::runif() 返回一个向量。如果您更明确地知道您使用的是哪一个(即使用 :: 的显式命名空间),您的代码可能仍然有效。