2016-09-05 1 views
2

Je peux créer un certain nombre de modèles différents en utilisant glmnet. J'ai ensuite enregistré les modèles dans une liste afin que je puisse utiliser cette liste de modèles dans l'utilisation future.R: glmnet: enregistrer et utiliser des modèles glmnet à partir d'une liste

library(glmnet) 
x1=matrix(rnorm(100*20),100,20) 
y1=matrix(rnorm(100*3),100,3) 
fit1m=glmnet(x1,y1,family="mgaussian") 

x2=matrix(rnorm(100*20),100,20) 
y2=matrix(rnorm(100*3),100,3) 
fit2m=glmnet(x2,y2,family="mgaussian") 


x3=matrix(rnorm(100*20),100,20) 
y3=matrix(rnorm(100*3),100,3) 
fit3m=glmnet(x3,y3,family="mgaussian") 


listmodels <-list(fit1m,fit2m,fit3m) 
listmodels 

Cependant, lorsque j'ai essayé de récupérer un modèle de cette liste, j'ai eu une erreur de classe

fit1 <- listmodels[1] 
fit1 


xnew=matrix(rnorm(100*20),100,20) 
pred1 <- as.data.frame(predict(fit1,newx=xnew),s="lambda.min") 
pred1 

Que dois-je faire pour que les modèles dans le travail de la liste correctement? Merci pour toute aide.

Répondre

1

Si on extrait correctement l'élément list, il fonctionnera-à-dire 'listmodels [1]' est encore un list, nous devons utiliser "listmodels [[1]] pour extraire l'élément

fit1 <- listmodels[[1]] 

xnew=matrix(rnorm(100*20),100,20) 
pred1 <- as.data.frame(predict(fit1,newx=xnew),s="lambda.min") 
pred1 

Si nous voulons faire à tous les list éléments, nous pouvons boucler sur la list (lapply) et faire le même processus

lapply(listmodels, function(x) as.data.frame(predict(x, 
     newx = matrix(rnorm(100*20), 100, 20)), s = "lambda.min"))