Bonjour
J'ai à ma disposition une matrice de corrélation de dimension 34 000*34 000, correspondant à la co-expression de gènes chez la tomate. J'ai pour objectif d'extraire les corrélations les plus intéressantes pour moi (>0.8),et de les placer dans un tableau que je pourrais transférer dans un logiciel de visualisation graphique (cytoscape). Ce tableau comprendrait 3 colonnes: GENE1,CORRELATION,GENE2
Pour ce faire, j'ai créé un script avec une boucle for qui semble fonctionner sur une petite matrice que j'ai créée pour le tester. Hélas quand je lance mon script sur le cluster de mon laboratoire avec la grande matrice, cela prend beaucoup trop de temps (3 jours de run, et ça n'est toujours pas fini). J'ai pensé à utiliser apply mais je ne sais pas comment l'appliquer à mon cas, car il me semble que apply applique une fonction sur toute la matrice, alors que dans mon cas seule la moitié de la matrice m'intéresse (il s'agit d'une matrice symétrique).
Quelqu'un peut-il m'aider à réduire ce temps d'attente ?
Merci d'avance
Voici le script que j'ai utilisé pour générer ma matrice d'exemple (26*26, symétrique, et avec les diagonales=0)
et voici le style de tableau que j'obtiens pour cet exemple:
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 #matrice 26,26 avec nombre entre -1 et 1, avec 1 sur les diagonales (exemple de matrice de corrélation ) m=matrix(runif(26*26, min=-1, max=1), ncol=26,nrow=26) row.names(m)=paste(letters) colnames(m)=paste(letters) diag(m)=0 m=forceSymmetric(m) m=as.matrix(m) m=as.data.frame(m) GENE1=vector() GENE2=vector() CORRELATION=vector() y=nrow(m) m=data.frame(m) for (i in 1:y) { for (j in i:y){ m=as.data.frame(m) GENE1=c(GENE1,row.names(m[i,])) GENE2=c(GENE2,row.names(m[j,])) CORRELATION=c(CORRELATION,m[i,j]) } } #on utilise une deuxième boucle partant de la ligne en cours (i:j) pour ne pas extraire les corrélations déjà extraites car il s'agit d'une matrice symétrique x=data.frame(GENE1,CORRELATION,GENE2) colnames(x) = c("GENE1","CORRELATION","GENE2") x=subset(x,CORRELATION>0.8)
GENE1 CORRELATION GENE2 a 0.9566742 n b 0.9232764 q b 0.9437570 x
Partager