Я хотел бы извлечь оценки коэффициентов glmnet
(после перекрестной проверки) в Rcpp Armadillo
, чтобы использовать их в другой функции Armadillo
.Я искал похожий вопрос, но не смог найти решение.
Я прилагаю попытку.(Не работает) Даже если бы я получил результат списка cv.glmnet
, я бы не смог использовать функцию coef
для получения коэффициентов.
R код
library(glmnet)
set.seed(1)
X = matrix(rnorm(1e3 * 201), 1e3, 201)
beta = -100:100
y = X%*%beta + rnorm(1e3)
cvfit = cv.glmnet(X, y, alpha = 1)
coefs = coef(cvfit, s = "lambda.min")
coefs # get these coefficients from Rcpp
Аргументы cv.glmnet
args(cv.glmnet)
> function (x, y, weights, offset = NULL, lambda = NULL, type.measure = c("mse", "deviance", "class", "auc", "mae"), nfolds = 10, foldid,
alignment = c("lambda", "fraction"), grouped = TRUE, keep = FALSE,
parallel = FALSE, ...)
NULL
C ++ код
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
Rcpp::List f_cpp(const arma::mat &x, const arma::vec &y,
const arma::vec &weights,
const arma::vec &lambda, double alpha,
int nfolds = 10){
Rcpp::Environment pkg = Rcpp::Environment::namespace_env("glmnet");
Rcpp::Function f_R = pkg["cv.glmnet"];
Rcpp::Nullable<arma::vec> offset = pkg["offset"];
Rcpp::CharacterVector type_measure = pkg["type.measure"];
arma::vec foldid = pkg["foldid"];
Rcpp::CharacterVector alignment = pkg["alignment"];
bool grouped = pkg["grouped"];
bool keep = pkg["keep"];
bool parallel = pkg["parallel"];
return f_R(x, y, weights, offset, lambda,
type_measure, nfolds, foldid,
alignment, grouped, keep, parallel, alpha = alpha);
// coef(f_R(...)) ???
}