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 :

Boucle for et if avec sample()


Sujet :

R

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2021
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Boucle for et if avec sample()
    Bonjour à tous,

    Je me tourne vers vous pour avoir des conseils concernant un script R que je n'arrive pas à construire (je suis débutante...).

    J'aimerais faire une boucle assez complexe (à mon niveau):
    Je considère 3 relevés d'observations : 6498, 6537, 6538.
    J'aimerais réaliser n tirage aléatoires successif avec remise sur ces 3 relevés, en sélectionner un parmi les 3 à chaque tour de la boucle.
    A chaque tirage aléatoire d'un relevé, j'aimerais enregistrer dans le tableau le numéro du relevé (n=x) dans la colonne x1, une autre information que je récupère sur un serveur (id_ma) (colonne x2), et dans la dernière colonne (x3), j'aimerais le nombre d'id_ma différents pour n compris entre 1 et x.

    Voilà ce que j'ai fais 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
    listeiso<-c(6498, 6537, 6538) #mes trois numéros de relevés qui sont reliés au serveur
    data_1 <- data.frame(x1 = numeric(), x2 = character(), x3 = numeric()) #je créé un tableau vide que la boucle devra remplir
     
    n=10 #je défini le nombre de tirages
     
    for (i in 1:n){                                                   #on fait n tirage (définis avant) chaque tirage est numéroté i
    +   sample(listeiso,1,replace=FALSE)                 #on tire 1 relevé parmi 3 relevés, avec remise
    +   data_1[i,1] <- i                                          # la première colonne prend la valeur du numéro du tirage, i 
    +   data_1[i,2] <- dbGetQuery(etc...)                 # la deuxième colonne va chercher le numéro id_ma correspondant
    +   data_1[i,3] <- ifelse (i = 1,1,if(data_1[i,2] != data_1[i-1,2]){                       
      data_1[i,3] <- 1}
    }
    pour la troisième colonne : si c'est le premier tirage, alors la troisième colonne prend la valeur 1 obligatoirement, ensuite soit le numéro
    id_ma est identique au précédent et on affiche 0, soit il est nouveau et on affiche 1, je comptais ensuite faire la somme des valeurs de la colonne pour avoir le nombre d'id_ma différents.



    Mon script ne fonctionne pas et je ne suis pas très doué en code... Avec ce script j'ai seulement mes colonnes 1 et 2 qui sont renseignées, et seulement pour la ligne n.10 de mon tableau...
    J'ai l'impression qu'il me sélectionne toujours le même relevé sans vraiment piocher aléatoirement. Bref il y a un soucis de boucle.

    Pourriez-vous m'éclairer ?
    Bonne soirée,
    Cordialement.

  2. #2
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juillet 2009
    Messages : 122
    Points : 306
    Points
    306
    Par défaut
    Bonjour,

    ton script n'utilise pas le résultat du tirage aléatoire obtenu par sample, il ne stocke d'ailleurs même pas le résultat dans une variable. C'est normal que le résultat ne soit pas aléatoire.

    Tu peux déjà commencer par stocker la valeur tirée au sort dans la première colonne comme tu sembles vouloir le faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(i in 1:n) {
      data_1[i,1] <- sample(listeiso, 1)
      # La suite ...
    }

Discussions similaires

  1. boucle for sur cellule avec liste déroulante! :)
    Par naiiiiiiiii dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/06/2018, 11h03
  2. Incrémentation dynamique d'un textbox avec une boucle for
    Par Etanne dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/03/2006, 15h17
  3. Erreur avec la boucle For
    Par Harvester dans le forum Langage
    Réponses: 3
    Dernier message: 06/11/2005, 16h46
  4. : remplir des zones de texte avec une boucle For
    Par Haro_GSD dans le forum Access
    Réponses: 3
    Dernier message: 20/09/2005, 21h23
  5. Problème avec une DLL dans une boucle For
    Par BraDim dans le forum Langage
    Réponses: 5
    Dernier message: 20/09/2005, 12h22

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