fix/improve selectVariables.R
authorBenjamin Auder <benjamin.auder@somewhere>
Sun, 2 Apr 2017 12:28:17 +0000 (14:28 +0200)
committerBenjamin Auder <benjamin.auder@somewhere>
Sun, 2 Apr 2017 12:28:17 +0000 (14:28 +0200)
pkg/R/selectVariables.R

index e4ed179..b4fc0ab 100644 (file)
@@ -41,13 +41,10 @@ selectVariables = function(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambd
                m = dim(phiInit)[2]
 
                #selectedVariables: list where element j contains vector of selected variables in [1,m]
-               selectedVariables = sapply(1:p, function(j) { ## je me suis permise de changer le type, 
-                 ##une liste de liste ca devenait compliqué je trouve pour choper ce qui nous intéresse
+               selectedVariables = lapply(1:p, function(j) {
                        #from boolean matrix mxk of selected variables obtain the corresponding boolean m-vector,
                        #and finally return the corresponding indices
-                       #seq_len(m)[ 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 ) ] ) ))
+                 seq_len(m)[ apply( abs(params$phi[j,,]) > thresh, 1, any ) ]
                })
 
                list("selected"=selectedVariables,"Rho"=params$rho,"Pi"=params$pi)
@@ -55,10 +52,15 @@ selectVariables = function(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambd
 
        # Pour chaque lambda de la grille, on calcule les coefficients
        out <-
-               if (ncores > 1){
-                       parLapply(cl, seq_along(glambda, computeCoefs))}
-               else lapply(seq_along(glambda), computeCoefs)
-       if (ncores > 1){
-               parallel::stopCluster(cl)}
+               if (ncores > 1)
+                       parLapply(cl, glambda, computeCoefs)
+               else lapply(glambda, computeCoefs)
+       if (ncores > 1)
+               parallel::stopCluster(cl)
+
+       # Suppression doublons
+       sha1_array <- lapply(out, digest::sha1)
+       out[ !duplicated(sha1_array) ]
+
        out
 }