使用 RcppArmadillo 时调用 one 或 eye 函数失败

Posted

技术标签:

【中文标题】使用 RcppArmadillo 时调用 one 或 eye 函数失败【英文标题】:Fail to call ones or eye function when using RcppArmadillo 【发布时间】:2021-04-08 15:15:19 【问题描述】:

我想在Armadillo 中使用oneeye 函数来构造矩阵或向量。但是,它不允许我这样做。这是一个示例代码:

#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'。当我删除&lt;mat&gt; 时,另一个按摩会显示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: arma::cube 的向量

使用带有 RcppArmadillo 的 SuperLU 稀疏求解器

在 R 中使用 RcppArmadillo 包和 rowvec 时出现编译错误

Rcpparmadillo c++ 创建布尔向量

犰狳矢量类上的 RcppArmadillo 样本