Je souhaiterais avoir une alternative rapide aux boucles for dans un exemple précis, pour lequel je ne vois pas trop comment m'en passer. Le problème est simple : j'ai ci-dessous deux extraits de jeux de données, correspondant à des mesures corporelles prises du côté droit et du côté gauche des mêmes individus :
Code : Tout sélectionner
right<- read.table(text=" Hum_01R Hum_02R Hum_03R Hum_04R Hum_05R
2 350 62 45 23 20
3 309 61 47 24 21
9 307 58 46 21 14
15 348 66 48 24 19
")
left <- read.table(text=" Hum_01 Hum_02 Hum_03 Hum_04 Hum_05
2 354 61 44 24 20
3 313 61 47 23 20
9 308 58 46 20 14
15 345 67 48 23 20
")
right # données côté droit
left # données côté gauche
Mon but est de créer un dataframe donnant, pour chaque paire possible d'individus (donc 4x4=16 paires dans cet exemple), l'écart entre les mesures gauches et les mesures droites, comme ci-dessous :
Code : Tout sélectionner
ID_left ID_right Hum_01 Hum_02 Hum_03 Hum_04 Hum_05
2 / 2 2 2 4 -1 -1 1 0
2 / 3 2 3 45 0 -3 0 -1
2 / 9 2 9 47 3 -2 3 6
2 / 15 2 15 6 -5 -4 0 1
3 / 2 3 2 -37 -1 2 0 0
3 / 3 3 3 4 0 0 -1 -1
3 / 9 3 9 6 3 1 2 6
3 / 15 3 15 -35 -5 -1 -1 1
9 / 2 9 2 -42 -4 1 -3 -6
9 / 3 9 3 -1 -3 -1 -4 -7
9 / 9 9 9 1 0 0 -1 0
9 / 15 9 15 -40 -8 -2 -4 -5
15 / 2 15 2 -5 5 3 0 0
15 / 3 15 3 36 6 1 -1 -1
15 / 9 15 9 38 9 2 2 6
15 / 15 15 15 -3 1 0 -1 1
Ce tableau est très simple à obtenir avec une bête boucle for. Seulement, mes "vraies données" ne comportent pas 4 individus comme ici, mais beaucoup plus. À titre d'exemple, pour "seulement" 2.000 individus au départ, on a déjà un dataframe de 4 millions de lignes à créer... et mine de rien, c'est déjà long en R avec une boucle for ! (Surtout que je n'ai pas non plus seulement 5 variables, ce qui n'arrange rien.)
Ma question : connaîtriez-vous un moyen plus économe en temps de calcul pour obtenir mon fameux tableau de différences à partir des deux objets "left" et "right" ci-dessus ?
Merci bien !