问题描述
我想在 one
中使用 eye
或 Armadillo
函数来构造矩阵或向量。但是,它不允许我这样做。这是一个示例代码:
#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
函数的 Armadillo 教程。我想知道为什么我的代码无法调用它。我错过了什么吗?
解决方法
您的代码中存在一些问题:
- 为什么要返回
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/stackoverflow/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
>