IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Clustering: problème de mémoire


Sujet :

R

  1. #1
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut Clustering: problème de mémoire
    Bonjour

    Voici ce que je cherche à faire. Je "normalise" un script R afin de traiter des données de microarrays.
    En gros, depuis des raw data Agilent ou Affymetrix, je fais un log2 des signaux pour chaque microarray, je normalise, je fais ma matrice de comparaison et d'en retire finalement les ratio, les pvalue et les résultats.
    Jusque là, super, ça marche.
    Maintenant, je veux adapter un programme que nous avions sous Spotfire où après normalisation, nous établissions une heatmap et un genes clustering par groupe et par gène.
    Voici le code génant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    occ<-table(sml)
    mat<-matrix(0, nrow=dim(Expression)[1], ncol=(dim(occ)*2)+2, 
                dimnames=list(
                  rownames(Expression),
                  c("NN AVG", "PN AVG", "PP AVG", "AVG", "SD", "NN NORM", "PN NORM", "PP NORM")
                  )
                )
    #Normalisation step
    for(i in 1:dim(Expression)[1]) {
       mat[i,1]<-mean(Expression[i,1:occ[1]])
       mat[i,2]<-mean(Expression[i,(occ[1]+1):(occ[1]+occ[2])])
       mat[i,3]<-mean(Expression[i,(occ[1]+occ[2]+1):(occ[1]+occ[2]+occ[3])])
       mat[i,4]<-mean(Expression[i,])
       mat[i,5]<-sd(Expression[i,])
       mat[i,6]<-(mat[i,1]-mat[i,4])/mat[i,5]
       mat[i,7]<-(mat[i,2]-mat[i,4])/mat[i,5]
       mat[i,8]<-(mat[i,3]-mat[i,4])/mat[i,5]
    }
    #Writing to a file results
    write.table(mat,file = "profiling_norm.txt", append = FALSE, quote = FALSE, sep = "\t",dec = ".", row.names = TRUE,col.names = TRUE, qmethod = c("escape", "double"))
     
    #the part of matrix which is interesting for clustering
    dim(mat[,6:8])
     
    #Clustering
    #The following line shows Error: cannot allocate vector of size 22.3 Gb
    hr <- hclust(as.dist(1-cor(t(mat[,6:8]), method="pearson")), method="complete"); 
    hc <- hclust(as.dist(1-cor(mat[,6:8], method="spearman")), method="complete")
    plot(hc,main=paste("Gene clustering ;", "Spearman distance"), xlab=NULL, cex=0.1, cex.main=1.5)
    Comme je le montre en commentaire, la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hr <- hclust(as.dist(1-cor(t(mat[,6:8]), method="pearson")), method="complete");
    m'affiche un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Error: cannot allocate vector of size 22.3 Gb
    Comment contourner ce problème ?

    Merci d'avance,

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  2. #2
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Bonjour,

    Peut être une précision quand à mon erreur. L'appel à cette ligne est suffisante pour provoquer la même erreur:
    J'affiche aussi l'appel dim(mat[,6:8]):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    > dim(mat[,6:8])
    [1] 54675     3
    Merci d'avance de votre aide,

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 208
    Points : 461
    Points
    461
    Par défaut
    Il faut passer par le package ff pour calculer des matrices de corrélation de grande taille (55000*55000 ca passera jamais en ram).
    J'avais trouvé un article interessant sur un exemple d'utilisation de ff.

    http://www.r-bloggers.com/bigcor-lar...matrices-in-r/

    Par un incroyable hasard, le sujet d'application correspond exactement à ce que tu veux faire, tu n'as qu'à suivre l'article.

  4. #4
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Bonjour Sengar

    Ca sera sur ma todo list de demain.
    Merci de ton aide, je ferais un retour sur ceci.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  5. #5
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Bonjour Sengar

    J'ai pas pû m'empêcher d'essayer et:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    > library("ff")
    > corMAT <- ff(vmode = "single", dim = c(dim(mat)[1], dim(mat)[1]))
    Error in if (length < 0 || length > .Machine$integer.max) stop("length must be between 1 and .Machine$integer.max") : 
      missing value where TRUE/FALSE needed
    In addition: Warning message:
    In ff(vmode = "single", dim = c(dim(mat)[1], dim(mat)[1])) :
      NAs introduced by coercion
    Mince alors...
    dim(mat)[1] = 54675
    Donc, je voulais faire une matrice de 54675 x 54675.
    Quelque chose que j'ai manqué ?

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 208
    Points : 461
    Points
    461
    Par défaut
    Mince alors...
    dm(mat)[1] = 54675
    Donc, je voulais faire une matrice de 54675 x 54675.
    Quelque chose que j'ai manqué ?
    Ah oui je pensais pas que ca atteignait la limite:

    Note that current implementations of R use 32-bit integers for integer vectors, so the range of representable integers is restricted to about +/-2*10^9: doubles can hold much larger integers exactly.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    > .Machine$integer.max
    [1] 2147483647
    > sqrt(2147483647)
    [1] 46340.95
    Du coup R gère pas les matrices au dela de 46k*46k pas de chance.
    Pas d'idée en tête pour contourner ca :/

  7. #7
    Membre confirmé
    Homme Profil pro
    MCU
    Inscrit en
    Juillet 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : MCU
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 185
    Points : 486
    Points
    486
    Par défaut
    Bonjour,

    Je pensais que la taille d'un vecteur ne dependait plus que de l'ordi (RAM dispo) et du systeme d'exploitation (32 vs 64 bit) depuis la version 3 de R? Pourriez-vous nous transmettre vos informations de session (sessionInfo())?

    Vincent

  8. #8
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Bonjour Vincent,

    Voici la sortie de sessionInfo:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    > sessionInfo()
    R version 3.0.1 (2013-05-16)
    Platform: x86_64-w64-mingw32/x64 (64-bit)
     
    locale:
    [1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252    LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C                           
    [5] LC_TIME=English_United Kingdom.1252    
     
    attached base packages:
    [1] grid      parallel  stats     graphics  grDevices utils     datasets  methods   base     
     
    other attached packages:
     [1] sfsmisc_1.0-24        hgu133plus2cdf_2.12.0 hgu133plus2.db_2.9.0  org.Hs.eg.db_2.9.0    RSQLite_0.11.4        DBI_0.2-7             affy_1.38.1          
     [8] GEOquery_2.26.2       gplots_2.11.3         MASS_7.3-28           KernSmooth_2.23-10    caTools_1.14          gdata_2.13.2          gtools_3.0.0         
    [15] AnnotationDbi_1.22.6  limma_3.16.7          Biobase_2.20.1        BiocGenerics_0.6.0   
     
    loaded via a namespace (and not attached):
     [1] affyio_1.28.0         BiocInstaller_1.10.3  bitops_1.0-5          IRanges_1.18.2        preprocessCore_1.22.0 RCurl_1.95-4.1        stats4_3.0.1         
     [8] tools_3.0.1           XML_3.98-1.1          zlibbioc_1.6.0
    Merci encore pour l'aide apportée,

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

Discussions similaires

  1. [WORD]Problème de mémoire
    Par Dnx dans le forum VBA Word
    Réponses: 17
    Dernier message: 05/10/2005, 14h48
  2. [Tomcat][Spring] Problème utilisation mémoire
    Par Wutintin dans le forum Hibernate
    Réponses: 12
    Dernier message: 08/09/2005, 14h57
  3. [Crystal Report]Problème de mémoire avec le moteur RDC
    Par sur_uix dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 26/05/2005, 09h09
  4. Problème de mémoire avec BDE
    Par Machuet dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 10h11
  5. Problème de mémoire Affichage images
    Par Repti dans le forum C++Builder
    Réponses: 6
    Dernier message: 29/03/2004, 20h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo