我有一个使用
Rcpp
从 R 调用的函数。我向该函数传递一个参数,该参数是一个常量无符号整数。该整数用于缩放由随机抽取组成的矩阵。 MWE:
Rcpp::cppFunction('
auto testfun(const arma::uword n = 10)
{
arma::dmat W = floor(arma::randu(35, 35, arma::distr_param(0, 2)));
return W / n;
}
', depends = "RcppArmadillo", plugins = "cpp17")
这个 MWE 让我的 R 崩溃了。另一方面,我的实际代码可以工作但返回垃圾。我在这里缺少什么?
看来是
auto
声明导致了问题。我不明白为什么。
使用
RcppArmadillo
包含模板转换器的已记录接口和类型,将失败的函数转变为工作函数。
(这里我还将亮度从 35 缩放到 5,以实现更紧凑的显示。无论哪种方式都可以。我还为显示添加了两个换行符。)
> Rcpp::cppFunction("arma::mat f(const int n = 10) {
arma::mat W = floor(arma::randu(5,5,arma::distr_param(0,2)));
return W / n; }", depends="RcppArmadillo")
> f()
[,1] [,2] [,3] [,4] [,5]
[1,] 0.0 0.0 0.1 0.1 0.0
[2,] 0.1 0.1 0.1 0.0 0.0
[3,] 0.1 0.1 0.0 0.1 0.0
[4,] 0.0 0.1 0.1 0.0 0.0
[5,] 0.0 0.0 0.0 0.0 0.1
> f(2)
[,1] [,2] [,3] [,4] [,5]
[1,] 0.0 0.0 0.5 0.0 0.0
[2,] 0.0 0.5 0.5 0.0 0.5
[3,] 0.5 0.5 0.0 0.5 0.0
[4,] 0.0 0.0 0.5 0.0 0.0
[5,] 0.0 0.5 0.0 0.5 0.5
>