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 :

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)
Ma question est : suis-je sûr d'avoir la matrice qui correspond à mes critères

Par exemple :

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
Et enfin, est-il possible de gagner du temps de calcul, si je dois traiter des matrices assez importantes?