- #TODO: parameter ncores (chaque tâche peut aussi demander du parallélisme...)
- cl = parallel::makeCluster( parallel::detectCores() / 4 )
- parallel::clusterExport(cl=cl,
- varlist=c("phiInit","rhoInit","gamInit","mini","maxi","glambda","X","Y","seuil","tau"),
- envir=environment())
- #Pour chaque lambda de la grille, on calcule les coefficients
- out = parLapply( seq_along(glambda), function(lambdaindex)
- {
- p = dim(phiInit)[1]
- m = dim(phiInit)[2]
+ if (ncores > 1) {
+ cl <- parallel::makeCluster(ncores, outfile = "")
+ parallel::clusterExport(cl = cl, varlist = c("phiInit", "rhoInit", "gamInit",
+ "mini", "maxi", "glambda", "X", "Y", "thresh", "eps"), envir = environment())
+ }
+
+ # Computation for a fixed lambda
+ computeCoefs <- function(lambda)
+ {
+ params <- EMGLLF(phiInit, rhoInit, piInit, gamInit, mini, maxi, gamma, lambda,
+ X, Y, eps, fast)
+
+ p <- ncol(X)
+ m <- ncol(Y)
+
+ # selectedVariables: list where element j contains vector of selected variables
+ # in [1,m]
+ 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
+ if (m>1) {
+ seq_len(m)[apply(abs(params$phi[j, , ]) > thresh, 1, any)]
+ } else {
+ if (any(params$phi[j, , ] > thresh))
+ 1
+ else
+ numeric(0)
+ }
+ })