construire un matrice à partire de autres

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

imen mannai
Messages : 13
Enregistré le : 11 Oct 2007, 14:07

construire un matrice à partire de autres

Messagepar imen mannai » 28 Sep 2008, 08:47

Bonjour tous le monde ,
je vais essayé de simplifier un peu ce que je veux et j'espère trouvé une sol ds ce forum.
voilà , j'ai une mat à remplir Mat(40,19) à partir d'aures M1(5,6) M2(8,6) M3(3,3)
############
proba <- matrix(NA,dim(M1)[1]*dim(M2)[1],7,dimnames=NULL)
colnames(proba)<-c("P1","P2", "P3", "P4", "P5","P6","prob")
Mat<-matrix(NA,dim(M1)[1]*dim(M2)[1],19, dimnames=NULL)
colnames(Mat, do.NULL = FALSE) colnames(Mat)<-c("A1_P","A2_P","A3_P","A4_P","A5_P","A6_P","A1_D","A2_D","A3_D",
"A4_D","A5_D","A6_D","P1","sum")

k<-1

for (i in 1:dim(M1)[1]) {
for (j in 1:dim(M2)[1]) {

for (m in 1:dim(M3)[1]) {
for (n in 1:dim(M3)[1]) {
{ auxi <-colnames(M3)
if (M1[i,1]==as.numeric (auxi[m]) & 2[j,1]==as.numeric(auxi[n]))
proba[k,1]<-M3[n,m]
proba[k,2]<-prod(M3[n,1:3])

Mat[k,] <-cbind(haploparen[i,],haplodesc_O[j,],proba[k,])

}} }
k<-k+1}}
print(Mat)
voilà à chaque fois il m'indique indice hors ligne proba[k,1]<-M3[n,m] !!!!
merci d'avance pour votre aide

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Messagepar Nicolas Péru » 28 Sep 2008, 11:00

Bonjour,

Essaye de commenter ton code et d'exprimer en toute lettre comment doit être remplie ta matrice à partir des trois matrices Mx.

Quelques questions :

-pourquoi définir une matrice mat et une matrice proba alors que tu ne parles au départ que d'une seule matrice à remplir (40x19) ?
-

Code : Tout sélectionner

{auxi <-colnames(M3)

je ne comprend pas pourquoi il y a une accolade en début de ligne.

Code : Tout sélectionner

if (M1[i,1]==as.numeric (auxi[m]) & 2[j,1]==as.numeric(auxi[n]))

A quoi sert ce if ? ou plutot qu'est ce qui est sensé se passer si le if est vérifié ? Et dans le if je suppose que le "2" est en fait un "M2""

Code : Tout sélectionner

Mat[k,] <-cbind(haploparen[i,],haplodesc_O[j,],proba[k,])

que sont haploparen et haplodesc_O ?

imen mannai
Messages : 13
Enregistré le : 11 Oct 2007, 14:07

Messagepar imen mannai » 28 Sep 2008, 19:12

Au début merci beaucoup d'avoir intéressé à mon pb ,
voilà je reprend mon programme avec les commentaire :) je vois en voulant être plus clair (nom des matrices) j'ai écris n'importe quoi !!!!:oops:
proba <- matrix(NA,dim(M1)[1]*dim(M2)[1],2,dimnames=NULL)#une matrice qui sera construite au fur et à mesure .
colnames(proba)<-c("P1","prod")#Ma matrice d'intérêt
Mat<-matrix(NA,dim(M1)[1]*dim(M2)[1],14, dimnames=NULL)
colnames(Mat, do.NULL = FALSE) colnames(Mat)<-c("A1_P","A2_P","A3_P","A4_P","A5_P","A6_P","A1_D","A2_D","A3_D",
"A4_D","A5_D","A6_D","P1","prod")

k<-1
for (i in 1:dim(M1)[1]){
for (j in 1:dim(M2)[1]) {

for (m in 1:dim(M3)[1]) {
for (n in 1:dim(M3)[1]) {
auxi <-colnames(M3)
if (M1[i,1]==as.numeric (auxi[m]) & M2[j,1]==as.numeric(auxi[n])) #cette condition pour i et j fixé ne sera vérifiée qu'une seule fois
{
proba[k,1]<-M3[n,m] # je remplie cette case
proba[k,2]<-prod(M3[n,1:3]) # la 2ème colonne sera le produit de trois colonne de M3
}
}}
Mat[k,] <-cbind(M1[i,],M2[j,],proba[k,])# je remplie ma matrice finale
k<-k+1
}}
print(Mat) #c'est la matrice qui m'interesse.
et merci

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Messagepar Nicolas Péru » 29 Sep 2008, 09:25

J'avoue que je m'y perd complètement dans les 4 boucles :s. Il doit peut être y avoir plus simple. En tout cas pourquoi utilises tu quatre boucles distinctes ? Quel est le but de chacune d'entre elles ?
Si tu arrives à expliquer comment doit être remplie ta matrice peut être que je pourrais t'aider. En attendant, je ne peux pas passer trop de temps à relire ton code et à essayer de comprendre comment doit être construite ta matrice. Pour ma part je préfère travailler à partir d'une demande plutôt que d'un code déjà écrit :)
Si non peut être que quelqu'un de plus expérimenté que moi en relecture de code pourra t'éclairer.

Nicolas


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité