Je n'arrive pas à résoudre ce casse-tête.
J'ai une matrice comportant des 0 et des 1. Nombre de lignes (individus) = N, nombre de caractères dans la chaine 0/1 = m.
Extrait :
Code : Tout sélectionner
head(mat)
V1 V2
A 0001011101001010011010100010110
B 0010101110011111111111100110111
C 0110011101101111010110010111011
D 0110011101101011010111010111011
E 0110011101101101010111010110011
F 0101101011101100101110110010110
Je veux comparer les chaines de 0/1 entre elles (la position dans la chaine est importante) afin d'obtenir une matrice des différences entre les profils 0/1 pour chaque individu. C'est-à-dire que si pour une position donnée, on a "1" pour l'individu A et "0" pour B (ou inversement), cela compte pour une différence entre A et B. La matrice que je cherche à construire contiendrait le nombre de différences obtenues en comparant tous les individus 2 à 2.
La matrice doit donc être symétrique, de dimensions N, N (nombre d'individus en ligne et colonne, comparés deux à deux).
Voici ce que j'ai essayé :
Code : Tout sélectionner
mat_diff<-matrix(0,nrow=N, ncol=N)
fun_a <- function(x){(str_split_fixed(x,"", n=m))} #pour découper ma chaine de caractères
fun_b <- function(x){(str_split_fixed(x,"", n=m))}
d <- 0
for(i in 1:N-1){
aa <- fun_a(mat_pfge$bands[i]) #découpe des chaines de caractères, du premier à l'avant-dernier
for(i in 1:N-1){
aa <- fun_a(mat_pfge$bands[i])
for(j in (i+1):N){
bb <- fun_b(mat_pfge$bands[j])
for (k in 1:m){
d <- d + match(aa[i,k], bb[j,k])
}
mat_diff[i,j] <- m-d
mat_diff[j,i] <- m-d
}
}
Et R me retourne le message d'erreur suivant :
Error in bb[j, k] : subscript out of bounds
Bref, je suis totalement perdue dans mon code !
Est-ce que quelqu'un pourrait m'aider ?