Ошибка оценки Rcpp: индекс за пределами

Я хочу использовать пакет «glasso» в коде Rcpp, а код 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 значений, поэтому я не понимаю, в чем проблема.

3

Решение

В вашем коде есть пара проблем. Последняя версия glasso () Функция возвращает список из 7 (не 5). В своем ответе я буду использовать эту версию glasso (). Пройти НОЛЬ значение для glasso () функция в вызове Rcpp, использовать 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
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]