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 :

Calcul de 4ème plus petit élément


Sujet :

R

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 118
    Points : 64
    Points
    64
    Par défaut Calcul de 4ème plus petit élément
    Bonjour,

    Je possède un vecteur d'entiers. Je veux calculer pour ce vecteur le 4ème plus petit élément.
    J'explique : pour ce vecteur, je n'ai pas besoin de faire le tri puis de déterminer l'élément voulu (ici ça va m'augmenter la complexité de mon algo), le principe est le suivant :
    trouver min(vect1) et le mettre en première position du vect1 (en faisant une permutation avec l'élément de cette position trouvée).
    Je note que j'ai besoin juste de faire ceci pour le 4ème plus petit

    Merci de votre aide.

    Cordialement B.H

  2. #2
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Points : 417
    Points
    417
    Par défaut
    Bonjour,

    ma première réponse aurait été:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    x <- rnorm(10)
    x
    # [1]  1.1746665 -0.7973380 -0.3791060  0.1418985  2.4534345  0.5177929
    # [7] -0.9678411 -2.5851251 -0.3653440 -0.2445953
    sort(x)[4]
    #[1] -0.379106
    Apparemment, vous ne voulez pas faire de tri. Peut-être un simple conviendrait.

    Voici un exemple pour mettre le minimum en début de vecteur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    y <- replace(x, c(1,which(x==min(x))), c(min(x), x[1]))
    y
    # [1] -2.5851251 -0.7973380 -0.3791060  0.1418985  2.4534345  0.5177929
    # [7] -0.9678411  1.1746665 -0.3653440 -0.2445953
    Bonne continuation

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    Merci de votre réponse
    J'ai vérifié et ça marche bien mais comment puis-je modifier ce petit code pour avoir les 4 premières cases triées?

    Cordialement B.H

  4. #4
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    J'explique encore une fois :
    Je commence avec un vecteur de données numériques (positives) non triées.
    • je fais un parcours sur le vecteur et je cherche le minimum en utilisant min puis je permute ce min avec le premier élément du vecteur
    • En deuxième étape, je commence maintenant à partir de la deuxième case du vecteur et je cherche le minimum sur vect[n-1] (la taille du vecteur décrémente)
    • quand arrivé au kième élément demandé, s’arrêter (sans continuer à trier le reste du vecteur)


    J'ai pensé à faire un code comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while(k<=4)
    {
    y <- replace(x, c(k,which(x==min(x))), c(min(x), x[1]))
    k=k+1
    }
    Ce n'est pas le vrai code, c'est juste l'aspect, je n'arrive pas vraiment à le développer

    Veuillez m'aidez svp
    Cordialement B.H

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Points : 417
    Points
    417
    Par défaut
    Bonsoir,

    voici un code à optimiser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    x <- rnorm(10)
    x
     
    z <- 0
     
    for(k in 1:4){
         y <- replace(x, c(1,which(x==min(x))), c(min(x), x[1]))
         z <- c(z, y[1])
         x <- y[-1]
    }
     
    x <- c(z[-1], x)
    c'est pas le vrai code c'est juste l'aspect. j'arrive pas vraiment à le développer
    C'est déjà bien de proposer quelque chose
    Je vous conseille cependant dans ce genre de situation de faire des tests à la main sur un petit jeu de données, en incrémentant le k avant même de faire une boucle. Vous comprendrez ainsi ce que fait votre boucle et ce qu'il faut modifier...

    Bon courage

  6. #6
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    Bonsoir,
    Merci ça marche bien

    En fait, la tâche que je vais faire c'est :
    pour une matrice de données (numériques) je vais calculer pour chaque ligne le kième plus petit élément, puis récupérer la kième colonne et travailler sur elle.

    Je vais maintenant développer une fonction qui permet de le faire.
    Je poserais mes questions si j'ai des difficultés

    Merci encore une fois

    Cordialement B.H

  7. #7
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    Bonjour,
    Voici le code qui me permet maintenant de calculer pour une matrice de données (numériques) le kième plus petit élément pour chaque ligne. C'est-à-dire de trouver dans la kième colonne de la matrice le plus petit élément pour chaque ligne.
    Avec : k un paramètre à choisir par l'utilisateur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    trimat=function(matrix)
    {
    source("C:\\Users\\Hamdi Baccouch\\Documents\\R1\\kiemevect")
    N1=dim(matrix)[1]
    a=NULL
    for(i in 1:N1)
         {
          z=matrix[i,]
          d=kiemevect(z)
          aa=paste("k",i,sep="")
          a=rbind( a , assign(aa,kiemevect(z),pos=1))
          }
      return(a)
    }
    Concernant la ligne source("C:\\Users\\Hamdi Baccouch\\Documents\\R1\\kiemevect"), je fais un appel à la fonction "kiemevect" qui me permet de trouver le kième plus petit élément pour un vecteur de données (toujous numériques).
    Et dont voici son code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    kiemevect=function(x)
    {
    z <- 0
     
    for(k in 1:4)
             {
                 y <- replace(x, c(1,which(x==min(x))), c(min(x), x[1]))
                 z <- c(z, y[1])
                 x <- y[-1]
              }
     
          x<- c(z[-1], x)
          return(x)
    }
    Merci pour m'aider
    Cordialement B.H

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/10/2010, 15h27
  2. Réponses: 3
    Dernier message: 05/12/2008, 03h39
  3. Réponses: 1
    Dernier message: 23/04/2007, 10h11
  4. Réponses: 13
    Dernier message: 07/01/2007, 19h43
  5. Trouver le Kième plus petit élément d'un tableau
    Par katrena99 dans le forum Pascal
    Réponses: 10
    Dernier message: 15/11/2006, 23h36

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