Rcpp Evaluation error: subscript out of bounds
Rcpp Evaluation error: subscript out of bounds
我想在Rcpp代码中使用"glasso"包,cpp代码如下:
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
// [[Rcpp::export]]
List sec(arma::mat x,double lam){
Environment gla("package:glasso");
Function gl=gla["glasso"];
double thr=1e-2;bool approx=0;
bool diag=1; bool nu=0;
List bc(5);
bc=gl(x,lam,nu,thr,thr,approx,approx,nu,nu,diag);
return(bc);}
但是当我在 R 中获取代码时,我得到了跟随错误。
set.seed(100)
x<-matrix(rnorm(50*10),ncol=10)
s<- var(x)
library(glasso)
a<-sec(s, 0.01)
"Error in sec(s, 0.01) : Evaluation error: subscript out of bounds."
我查看了"glasso"包的文档,结果列表包含5个值,所以我很困惑哪里有问题。
您的代码中有几个问题。最新版本的 glasso() 函数 returns 列表 7(不是 5) 在我的回答中我将使用这个版本的 glasso()。要在 Rcpp 调用中将 NULL 值传递给 glasso() 函数,请使用 R_NilValue。在我的例子中,我在参数列表 glasso() 函数的末尾省略了一些值,因为我不确定你想传递什么值(看起来你使用的是这个包的旧版本):
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
// [[Rcpp::export]]
List sec(arma::mat x,double lam){
Environment gla("package:glasso");
Function gl=gla["glasso"];
double thr=1e-2;bool approx=0;
bool diag=1; bool nu=0;
List bc(7);
bc = gl(x, lam, R_NilValue,thr,thr,approx,diag);
return(bc);}
这是我的 R 代码:
library(Rcpp)
sourceCpp("test.cpp")
library(glasso)
set.seed(100)
x<-matrix(rnorm(50*10),ncol=10)
s<- var(x)
a<-sec(s, 0.01)
#output
a
# $w
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] 0.680779447 0.33966152 -0.009663187 -0.108946142 0.07360211 0.21757108
# [2,] 0.339661517 1.43157518 -0.042659411 -0.190859910 0.11234565 0.15097851
#...
#
# $wi
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] 2.26552621 -0.57002634 0.00000000 0.114629054 -0.159489421 -0.46727499
# [2,] -0.58556329 1.01623488 -0.04678184 0.236972034 0.000000000 -0.03616841
#...
#
# $loglik
# [1] -43.31512
#
# $errflag
# [1] 0
#
# $approx
# [1] FALSE
#
# $del
# [1] 0.008940439
#
# $niter
# [1] 1
我想在Rcpp代码中使用"glasso"包,cpp代码如下:
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
// [[Rcpp::export]]
List sec(arma::mat x,double lam){
Environment gla("package:glasso");
Function gl=gla["glasso"];
double thr=1e-2;bool approx=0;
bool diag=1; bool nu=0;
List bc(5);
bc=gl(x,lam,nu,thr,thr,approx,approx,nu,nu,diag);
return(bc);}
但是当我在 R 中获取代码时,我得到了跟随错误。
set.seed(100)
x<-matrix(rnorm(50*10),ncol=10)
s<- var(x)
library(glasso)
a<-sec(s, 0.01)
"Error in sec(s, 0.01) : Evaluation error: subscript out of bounds."
我查看了"glasso"包的文档,结果列表包含5个值,所以我很困惑哪里有问题。
您的代码中有几个问题。最新版本的 glasso() 函数 returns 列表 7(不是 5) 在我的回答中我将使用这个版本的 glasso()。要在 Rcpp 调用中将 NULL 值传递给 glasso() 函数,请使用 R_NilValue。在我的例子中,我在参数列表 glasso() 函数的末尾省略了一些值,因为我不确定你想传递什么值(看起来你使用的是这个包的旧版本):
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
// [[Rcpp::export]]
List sec(arma::mat x,double lam){
Environment gla("package:glasso");
Function gl=gla["glasso"];
double thr=1e-2;bool approx=0;
bool diag=1; bool nu=0;
List bc(7);
bc = gl(x, lam, R_NilValue,thr,thr,approx,diag);
return(bc);}
这是我的 R 代码:
library(Rcpp)
sourceCpp("test.cpp")
library(glasso)
set.seed(100)
x<-matrix(rnorm(50*10),ncol=10)
s<- var(x)
a<-sec(s, 0.01)
#output
a
# $w
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] 0.680779447 0.33966152 -0.009663187 -0.108946142 0.07360211 0.21757108
# [2,] 0.339661517 1.43157518 -0.042659411 -0.190859910 0.11234565 0.15097851
#...
#
# $wi
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] 2.26552621 -0.57002634 0.00000000 0.114629054 -0.159489421 -0.46727499
# [2,] -0.58556329 1.01623488 -0.04678184 0.236972034 0.000000000 -0.03616841
#...
#
# $loglik
# [1] -43.31512
#
# $errflag
# [1] 0
#
# $approx
# [1] FALSE
#
# $del
# [1] 0.008940439
#
# $niter
# [1] 1