我正在尝试使用Rcpp和RcppArmadillo(Windows中的Rstudio)创建一个包含一些函数的包。但是,我遇到了一些问题,我很感激你的意见。以下是.cpp文件(名为update_s.cpp):
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
using namespace arma;
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector update_sigma(NumericMatrix Theta, NumericMatrix Y, NumericMatrix M, NumericVector lambda, int nu){
int n = Y.ncol();
int K = Y.nrow();
int R = Theta.ncol();
double N = n;
NumericVector Den(n);
NumericMatrix Thetasq(n, R);
NumericMatrix Residual(K, n);
NumericMatrix Res_sq(K, n);
NumericMatrix Tmp(n, K);
NumericVector scale;
NumericVector sigma(K);
for (int j = 0; j < R; j++){
arma::Thetasq.col(j) = pow( arma::Theta.col(j), 2);
}
for (int i = 0; i < n; i++){
Den(i) = sum(Thetasq.row(i));
}
Residual = Y - M* arma::trans(Theta);
for(int i = 0; i < K; i++){
Res_sq.row(i) = pow(Residual.row(i),2);
}
for(int i = 0; i < n; i++){
for(int j = 0; j < K; j++){
Tmp(i,j) = Res_sq(j,i)/Den(i);
}
}
scale = (nu*lambda)/(N + nu) + (1/(N + nu))*(sum(Tmp));
for (int k = 0; k < K; k++){
sigma(k) = ((N + nu)*scale(k))/(R::rchisq(N + nu));
}
return sigma;
}
当我从R:
运行时sourceCpp('Docs/Bayes/update_s.cpp')
这是我得到的错误:
update_s.cpp:26:5: error: 'Thetasq' is not a member of 'arma'
update_s.cpp:26:33: error: 'Theta' is not a member of 'arma'
update_s.cpp:31:38: error: no matching function for call to 'trans(Rcpp::NumericMatrix&)'
我不知道为什么我会收到错误。通过查看在线教程,似乎将RcppArmadillo函数用于Rcpp的方法是使用:
arma::function();
这是对的吗?或者是否有其他方法可以使用它们。请告诉我。
谢谢,
纳波