modification du calcul du tableau etoiles/classe : les variables uniques sont éliminés
[iramuteq] / PrintRScript.py
index d4d3275..4987b21 100644 (file)
@@ -109,7 +109,7 @@ class Alceste2(PrintRScript) :
 #
 
 
-def RchdTxt(DicoPath, RscriptPath, mincl, classif_mode, nbt = 9, libsvdc = False, libsvdc_path = None, R_max_mem = False):
+def RchdTxt(DicoPath, RscriptPath, mincl, classif_mode, nbt = 9, svdmethod = 'svdR', libsvdc = False, libsvdc_path = None, R_max_mem = False, mode_patate = False):
     txt = """
     source("%s")
     source("%s")
@@ -124,17 +124,30 @@ def RchdTxt(DicoPath, RscriptPath, mincl, classif_mode, nbt = 9, libsvdc = False
     txt += """
     nbt <- %i
     """ % nbt
-    if libsvdc :
+    if svdmethod == 'svdlibc' and libsvdc :
         txt += """
-        libsvdc <- TRUE
+        svd.method <- 'svdlibc'
         libsvdc.path <- "%s"
         """ % ffr(libsvdc_path)
+    elif svdmethod == 'irlba' :
+        txt += """
+        library(irlba)
+        svd.method <- 'irlba'
+        libsvdc.path <- NULL
+        """
     else :
         txt += """
-        libsvdc <- FALSE
+        svd.method = 'svdR'
         libsvdc.path <- NULL
         """
-
+    if mode_patate :
+        txt += """
+        mode.patate = TRUE
+        """
+    else :
+        txt += """
+        mode.patate = FALSE
+        """
     txt +="""
     library(Matrix)
     data1 <- readMM("%s")
@@ -148,14 +161,13 @@ def RchdTxt(DicoPath, RscriptPath, mincl, classif_mode, nbt = 9, libsvdc = False
         data2 <- as(data2, "dgCMatrix")
         row.names(data2) <- 1:nrow(data2)
         """ % DicoPath['TableUc2']
-    #log.info('ATTENTION ############# MODEPATATE ####################')
     txt += """
-    chd1<-CHD(data1, x = nbt, mode.patate = FALSE, libsvdc = libsvdc, libsvdc.path = libsvdc.path)
+    chd1<-CHD(data1, x = nbt, mode.patate = mode.patate, svd.method = svd.method, libsvdc.path = libsvdc.path)
     """
     
     if classif_mode == 0:
         txt += """
-    chd2<-CHD(data2, x = nbt, libsvdc = libsvdc, libsvdc.path = libsvdc.path)
+    chd2<-CHD(data2, x = nbt, mode.patate = mode.patate, svd.method = svd.method, libsvdc.path = libsvdc.path)
     """
     else:
         txt += """
@@ -173,12 +185,12 @@ def RchdTxt(DicoPath, RscriptPath, mincl, classif_mode, nbt = 9, libsvdc = False
         """ % DicoPath['listeuce2']
         
     txt += """
-#    rm(data1)
+    rm(data1)
     """
     
     if classif_mode == 0:
         txt += """
-#        rm(data2)
+        rm(data2)
         """
     txt += """
     chd.result <- Rchdtxt("%s",mincl=%i,classif_mode=%i, nbt = nbt)
@@ -275,7 +287,7 @@ def RchdQuest(DicoPath, RscriptPath, nbcl = 10, mincl = 10):
     chd.result<-Rchdquest("%s","%s","%s", nbt = nbt, mincl = mincl)
     n1 <- chd.result$n1
     classeuce1 <- chd.result$cuce1
-    """ % (DicoPath['Act01'], DicoPath['listeuce1'], DicoPath['uce'])
+    """ % (DicoPath['mat01'], DicoPath['listeuce1'], DicoPath['uce'])
     
     txt += """
     tree_tot1 <- make_tree_tot(chd.result$chd)
@@ -378,6 +390,10 @@ write.csv2(gbcluster,file="%s")
     xmax <- max(afc$rowcoord[,1], na.rm = TRUE) + (0.1 * max(afc$rowcoord[,1], na.rm = TRUE))
     ymin <- min(afc$rowcoord[,2], na.rm = TRUE) + (0.1 * min(afc$rowcoord[,2], na.rm = TRUE))
     ymax <- max(afc$rowcoord[,2], na.rm = TRUE) + (0.1 * max(afc$rowcoord[,2], na.rm = TRUE))
+    print(xmin)
+    print(xmax)
+    print(ymin)
+    print(ymax)
     """ % taillecar
         txt += """
     PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", what='coord', deb=1, fin=(debsup-1), xlab = xlab, ylab = ylab, xmin=xmin, xmax=xmax, ymin = ymin, ymax=ymax)
@@ -431,6 +447,9 @@ def write_afc_graph(self):
     if self.param['tchi'] : tchi = 'TRUE'
     else : tchi = 'FALSE'
 
+    if self.param['svg'] : svg = 'TRUE'
+    else : svg = 'FALSE'
+
     with open(self.RscriptsPath['afc_graph'], 'r') as f:
         txt = f.read()
 
@@ -460,7 +479,8 @@ def write_afc_graph(self):
     tchi,\
     self.param['tchi_min'],\
     self.param['tchi_max'],\
-    ffr(os.path.dirname(self.fileout)))
+    ffr(os.path.dirname(self.fileout)),\
+    svg)
     return scripts
         
 def print_simi3d(self):
@@ -535,9 +555,29 @@ def barplot(table, rownames, colnames, rgraph, tmpgraph, intxt = False) :
     if not intxt :
         #FIXME
         txt = """
-            inf <- NA
             di <- matrix(data=%s, nrow=%i, byrow = TRUE)
-            di[is.na(di)] <- max(di, na.rm=TRUE) + 2
+            toinf <- which(di == Inf)
+            tominf <- which(di == -Inf)
+            if (length(toinf)) {
+                di[toinf] <- NA
+                valmax <- max(di, na.rm = TRUE)
+                if (valmax <= 0) {
+                    valmax <- 2
+                } else {
+                    valmax <- valmax + 2
+                }
+                di[toinf] <- valmax
+            }
+            if (length(tominf)) {
+                di[tominf] <- NA
+                valmin <- min(di, na.rm = TRUE)
+                if (valmin >=0) {
+                    valmin <- -2
+                } else {
+                    valmin <- valmin - 2
+                }
+                di[tominf] <- valmin
+            }
             rownames(di)<- %s
             colnames(di) <- %s
         """ % (txttable, rownb, rownames, colnames)
@@ -553,7 +593,20 @@ def barplot(table, rownames, colnames, rgraph, tmpgraph, intxt = False) :
        par(mar=c(0,0,0,0))
            layout(matrix(c(1,2),1,2, byrow=TRUE),widths=c(3,lcm(7)))
         par(mar=c(2,2,1,0))
-        coord <- barplot(as.matrix(di), beside = TRUE, col = color, space = c(0.1,0.6))
+        yp = ifelse(length(toinf), 0.2, 0)
+        ym = ifelse(length(tominf), 0.2, 0)
+        ymin <- ifelse(!length(which(di < 0)), 0, min(di) - ym)
+        coord <- barplot(as.matrix(di), beside = TRUE, col = color, space = c(0.1,0.6), ylim=c(ymin, max(di) + yp))
+        if (length(toinf)) {
+            coordinf <- coord[toinf]
+            valinf <- di[toinf]
+            text(x=coordinf, y=valinf + 0.1, 'i')
+        }
+        if (length(tominf)) {
+            coordinf <- coord[toinf]
+            valinf <- di[toinf]
+            text(x=coordinf, y=valinf - 0.1, 'i')
+        }            
         c <- colMeans(coord)
         c1 <- c[-1]
         c2 <- c[-length(c)]
@@ -653,7 +706,7 @@ class PrintSimiScript(PrintRScript) :
             """ % (self.pathout['mat01.csv'], self.pathout['actives.csv'], self.pathout['selected.csv'])
             txt += """
             dm <-readMM(dm.path)
-            cn <- read.table(cn.path, sep=';', quote='"')
+            cn <- read.table(cn.path, sep='\t', quote='"')
             colnames(dm) <- cn[,1]
             sel.col <- read.csv2(selected.col)
             dm <- dm[, sel.col[,1] + 1]