0

我想检查统计信息中的 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 中没问题),而我不知道如何处理大小写。有什么帮助吗?

4

0 回答 0