IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Appliquer un calcul à un lower.tri


Sujet :

R

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Appliquer un calcul à un lower.tri
    Bonjour,
    J'essaie de créer une matrice séparé en 3 partie (soit la diagonale, au-dessus de la diagonale en en-dessous), car chaque partie prend des valeurs différentes. Le problème que je rencontre est pour la partie en dessous de la diagonale, le restant fonctionne très bien et donne comme résultat ce que je souhaite. Voilà, je vous montre ce que j'ai fait pour l'instant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    mattransErs <- matrix(nrow=50,ncol=50)
    diag(mattransErs) <- pnorm(toe$classe+1,matDHPfin,1.5)*matmorters
    upper.tri(mattransErs)
    mattransErs[upper.tri(mattransErs)] <- 0
    lowermatErs<-lower.tri(mattransErs)
     
    for(j in ncol(mattransErs)) {
      for(i in nrow(mattransErs)){
        if(mattransErs[[i,j]]=='TRUE') {mattransErs[i,j]<- matmorters*(pnorm(as.matrix(toe$classe)+3,matDHPfin,1.5)- pnorm(as.matrix(toe$classe)+1,matDHPfin,1.5))
        }
      }
    }
    J'avais déjà aussi essayer un autre code pour en-dessous de la diagonale, mais sans succès non plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lower.tri(mattransErs)
    mattransErs[lower.tri(mattransErs)]<- matmorters*(pnorm(toe$classe+1,matDHPfin,1.5)- pnorm(toe$classe+1,matDHPfin,1.5))
    Les données de la partie en-dessous sont calculés à partie d'un data frame (toe) et pour la variable classe, je souhaite par exemple que les calculs pour les valeurs de la cinquième ligne de la matrice soient associés à la cinquième valeur de la variable classe de mon data frame, même chose pour la sixième ligne avec la sixième valeur, etc.
    Lorsque je fais rouler ma boucle, rien ne se produit et rien ne change dans mes matrices. Ma question peux paraître un peu flou, mais si quelqu'un pourrait m'aider, cela serait très apprécié, puisque j'ai essayé plusieurs codes différents sans succès.

  2. #2
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Points : 561
    Points
    561
    Par défaut
    Bonjour,

    Pour ce qui concerne la diagonale et la partie 'haute' de la matrice les calculs me semblent ok mais rien dans ta boucle ne lui indique que tu es dans la partie basse puisque tu ne fais pas référence à lowermatErs.
    Sans connaître la nature de tes objets il est compliqué de te répondre mais tu peux déjà essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(j in ncol(mattransErs)) {
      for(i in nrow(mattransErs)){
        if(lowermatErs[i,j]) 
           mattransErs[i,j]<- matmorters*(pnorm(as.matrix(toe$classe)+3,matDHPfin,1.5)- pnorm(as.matrix(toe$classe)+1,matDHPfin,1.5))
        }
      }
    Ensuite il me semble qu'il y a des choses étranges dans ton code. La première chose c'est que si tu cherches a avoir pour la ième ligne de mattransErs la ième classe de toe alors il n'y a rien qui y fait référence ici. De plus si tu souhaites remplir que des lignes alors tu n'as pas besoin de boucler sur les colonnes et les lignes. Une boucle seulement sur les lignes devrait suffire et tu peux inclure la condition sur lowermatErs.
    Un exemple avec une matrice bidon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    mat <- matrix(nrow = 5, ncol = 5)
    diag(mat) <- 5
    mat[upper.tri(mat)] <- 0
    lower <- lower.tri(mat)
    for (i in 1:nrow(mat)) {
      mat[i,][lower[i,]] <- rnorm(sum(lower[i,]), i)
    }
    cdlt

Discussions similaires

  1. Calcul excel avec tri
    Par arnd92 dans le forum Excel
    Réponses: 1
    Dernier message: 27/03/2014, 02h40
  2. comment appliquer un calcul en fonction du tableau ?
    Par toshiro92 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 15/11/2007, 18h10
  3. tri sur des champs calculés
    Par Thib dans le forum Bases de données
    Réponses: 10
    Dernier message: 18/10/2005, 17h24
  4. tri et calcul sur un champ
    Par PAUL87 dans le forum Access
    Réponses: 11
    Dernier message: 17/10/2005, 21h35
  5. formule de calcul du TRI avec PL/SQL
    Par mongilotti dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 30/07/2005, 20h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo