salut à tous,
je dois programmer une fonction qui, à partir d'une matrice de 0 et de 1 (absence/présence de parasites sur des hôtes), me renvoie la 'nested matrix' correspondante, autrement dit celle dans laquelle on a regroupé au maximum les associations similaires dans un coin de la matrice (en changeant uniquement l'ordre des lignes/colonnes).
En trois minutes parce que ce n'est pas une priorité, j'ai sorti le code suivant :
Ma question est : suis-je sûr d'avoir la matrice qui correspond à mes critères
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 test.matrice <- round(runif(8*8,0,1),0) test.matrice <- matrix(test.matrice,ncol=8) nest = function(matrice,do.plot) { perm <- 1 while(perm != 0) { perm <- 0 for(i in 1:(nrow(matrice)-1)) { temp.i <- matrice[i,] temp.s <- matrice[(i+1),] if(sum(temp.i)<sum(temp.s)) { matrice[i,] <- temp.s matrice[(i+1),] <- temp.i perm <- perm + 1 } } } perm <- 1 while(perm != 0) { perm <- 0 for(i in 1:(ncol(matrice)-1)) { temp.i <- matrice[,i] temp.s <- matrice[,(i+1)] if(sum(temp.i)<sum(temp.s)) { matrice[,i] <- temp.s matrice[,(i+1)] <- temp.i perm <- perm + 1 } } } if(do.plot) { cols <- colorRampPalette(c("#FFFFFF", "#000000")) image(matrice,col= cols(5)) } return(matrice) } nest(test.matrice,do.plot=TRUE)
Par exemple :
Et enfin, est-il possible de gagner du temps de calcul, si je dois traiter des matrices assez importantes?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 0 1
Partager