使用 RcppArmadillo 时调用 one 或 eye 函数失败
Posted
技术标签:
【中文标题】使用 RcppArmadillo 时调用 one 或 eye 函数失败【英文标题】:Fail to call ones or eye function when using RcppArmadillo 【发布时间】:2021-04-08 15:15:19 【问题描述】:我想在Armadillo
中使用one
或eye
函数来构造矩阵或向量。但是,它不允许我这样做。这是一个示例代码:
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
// [[Rcpp::export]]
SEXP Generate(arma::mat Mat)
arma::mat Mat_2 = ones<mat>(5,6);
错误信息让我想起了use of undeclared idenfier of 'mat'
。当我删除<mat>
时,另一个按摩会显示use of undeclared idenfier of 'ones'
。
我查阅了包含ones
函数的犰狳教程。我想知道为什么我的代码无法调用它。我错过了什么吗?
【问题讨论】:
【参考方案1】:你的代码有几个问题:
为什么返回SEXP
?使用类型来发挥自己的优势
如果不使用Mat
,为什么要传入?
没有return
声明
命名空间的使用有点松散。
清理后的版本如下:
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
arma::mat Generate(int n=5, int k=6)
arma::mat m = arma::ones<arma::mat>(n,k);
return m;
/*** R
Generate()
*/
它编译并运行良好:
> Rcpp::sourceCpp("~/git/***/67006975/answer.cpp")
> Generate()
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 1 1 1 1 1
[2,] 1 1 1 1 1 1
[3,] 1 1 1 1 1 1
[4,] 1 1 1 1 1 1
[5,] 1 1 1 1 1 1
>
【讨论】:
感谢您的指正!它确实有很大帮助!以上是关于使用 RcppArmadillo 时调用 one 或 eye 函数失败的主要内容,如果未能解决你的问题,请参考以下文章
使用 RcppArmadillo 时无法加载犰狳立方体<uword>
使用带有 RcppArmadillo 的 SuperLU 稀疏求解器