Bonjour,

J'ai actuellement des tableaux de données contenant dans chaque ligne une séquence. Chaque chiffre correspond à un point de coordonnées x et y.

0 1 2 3 4 5 6 7 8 0
0 2 4 5 7 8 0
0 1 5 8 3 0

Chacun de ces tableaux fait 80 lignes, en revanche le nombre max de colonnes varie. Pour chaque séquence, je souhaite obtenir la distance en reliant les points dans l'ordre. J'utilise donc ce type de code : en considérant A comme ma matrice de séquences, pour que chaque séquence fasse la même longueur, je remplace les NA par des 0.

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
A[is.na(A)] <- 0  
 
 
X=c(400,400.1381972,393.1934251,295.5148688,121.6085368,200.0388769,166.1220046)
Y=c(50,330.4807384,492.5948299,496.5508503,628.4060699,315.8271743,208.3168871)
 
 
B=A
C=A
 
for (i in c(0:6)) # remplace les numéros de fleurs par leurs coordonnées X dans B et Y dans C
{
  B[B==i]<-X[i+1]
  C[C==i]<-Y[i+1]
}
 
mat_distance=NULL# permet de creer un vecteur distance nul
 
for (i in 1:nrow(A)) #boucle permettant d'obtenir la distance totale pour chaque combinaison
{ 
  Distance = sqrt(((B[i,2])-(B[i,1]))^2+((C[i,2])-(C[i,1]))^2) + sqrt(((B[i,3])-(B[i,2]))^2+((C[i,3])-(C[i,2]))^2) + sqrt(((B[i,4])-(B[i,3]))^2+((C[i,4])-(C[i,3]))^2) + sqrt(((B[i,5])-(B[i,4]))^2+((C[i,5])-(C[i,4]))^2) + sqrt(((B[i,6])-(B[i,5]))^2+((C[i,6])-(C[i,5]))^2) + sqrt(((B[i,7])-(B[i,6]))^2+((C[i,7])-(C[i,6]))^2) + sqrt(((B[i,8])-(B[i,7]))^2+((C[i,8])-(C[i,7]))^2)) 
  mat_distance=c(mat_distance,Distance) 
}
 
matfinal=cbind(A,distance=mat_distance)
write.csv2(matfinal,file="Distanceséquence.csv")
Mon problème ici est que mon code doit être modifié en fonction du nombre max de colonnes dans la formule de la distance. Quelqu'un aurait-il une idée pour automatiser le tout ? Merci d'avance pour vos réponses.