update to get a valse programm which could be run
[valse.git] / pkg / R / selectiontotale.R
index bfb9325..25128cb 100644 (file)
@@ -29,21 +29,24 @@ selectiontotale = function(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambd
     selectedVariables = list()
     Rho = list()
     Pi = list()
+    cpt = 0
     #Pour chaque lambda de la grille, on calcule les coefficients
     for (lambdaIndex in 1:length(glambda)){
-      print(lambdaIndex)
       params = 
         EMGLLF(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambda[lambdaIndex],X,Y,tau)
       p = dim(phiInit)[1]
       m = dim(phiInit)[2]
       #selectedVariables: list where element j contains vector of selected variables in [1,m]
-      selectedVariables[[lambdaIndex]] = sapply(1:p, function(j) {
+      if (sum(params$phi) != 0){
+        cpt = cpt+1
+      selectedVariables[[cpt]] = sapply(1:p, function(j) {
         #from boolean matrix mxk of selected variables obtain the corresponding boolean m-vector,
         #and finally return the corresponding indices
-        c(seq_len(m)[ apply( abs(params$phi[j,,]) > thresh, 1, any ) ], rep(0, m-length(apply( abs(params$phi[j,,]) > thresh, 1, any ) )))
+        c(seq_len(m)[ apply( abs(params$phi[j,,]) > thresh, 1, any ) ], rep(0, m-length(seq_len(m)[ apply( abs(params$phi[j,,]) > thresh, 1, any ) ] ) ))
       })
-      Rho[[lambdaIndex]] = params$Rho
-      Pi[[lambdaIndex]] = params$Pi
+      Rho[[cpt]] = params$rho
+      Pi[[cpt]] = params$pi
+      }
     }
     list("selected"=selectedVariables,"Rho"=Rho,"Pi"=Pi)
   }