我想检查统计信息中的 BIC 使用情况。我保存为check_bic.cpp的小示例如下所示:
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;
// [[Rcpp::export]]
List check_bic(const int N = 10, const int p = 20, const double seed=0){
arma_rng::set_seed(seed); // for reproducibility
arma::mat Beta = randu(p,N); //randu/randn:random values(uniform and normal distributions)
arma::vec Bic = randu(N);
uvec ii = find(Bic == min(Bic)); // may be just one or several elements
int id = ii(ii.n_elem); // fetch the last one element
vec behat = Beta.col(id); // fetch the id column of matrix Beta
List ret;
ret["Bic"] = Bic;
ret["ii"] = ii;
ret["id"] = id;
ret["Beta"] = Beta;
ret["behat"] = behat;
return ret;
}
然后我 在 R 中编译check_bic.cpp
library(Rcpp)
library(RcppArmadillo);
sourceCpp("check_bic.cpp")
并且编译可以成功通过。然而,当我跑
check_bic(10,20,0)
在 R 中,它显示错误为
error: Mat::operator(): index out of bounds
Error in check_bic(10, 20, 0) : Mat::operator(): index out of bounds
我逐行检查.cpp代码,猜测问题可能发生在
uvec ii = find(Bic == min(Bic)); // may be just one or several elements
int id = ii(ii.n_elem); // fetch the last one element
因为如果uvec ii
只有一个元素,那么ii.n_elem
可能是 NaN 或 Rcpp 中的其他东西(虽然在 Matlab 中没问题),而我不知道如何处理大小写。有什么帮助吗?