Supposons que j'ai une matrice de la forme suivante:Faire une matrice à distance à partir des informations de position en utilisant le langage R
Residue Can.Count SideChain XCoord YCoord ZCoord
1 MET 1 A 62.935 97.579 30.223
2 THR 2 A 63.155 95.525 27.079
3 GLU 3 A 65.289 96.895 24.308
4 TYR 4 A 64.899 96.220 20.615
8 LYS 8 A 67.593 96.715 18.023
9 LEU 9 A 65.898 97.863 14.816
10 VAL 10 A 67.664 98.557 11.533
Notez que les numéros 5-6-7 sont ignorés. Ce que je veux faire est de faire une "matrice de distance" entre chaque résidu à chaque autre résidu. Dans ce cas, je veux faire une matrice 7x7 avec l'élément (1,3) étant la distance entre ces positions.
Maintenant, je me rends compte que je n'ai pas besoin de remplir la moitié inférieure, tout ce qui est au-dessus de la diagonale est suffisant. Je vois aussi comment je pourrais le faire en utilisant 2 pour les boucles comme suit:
for(i in 1:7) {
for(j in i:7){
mymatrix[i,j] <- calcdistance(xyz1,xyz2) #I have the distance function already coded.
}
}
Je me rends compte que ce sera toujours O (n^2), mais je me demande si je peux tirer parti de la puissance de R pour faire de cette matrice en utilisant une déclaration d'application (ou quelque chose d'encore plus intelligent)? J'ai essayé de le faire mais je n'ai pas réussi. Merci pour votre hep!
Parfait. Juste ce dont j'avais besoin. Je vous remercie! – user1357015