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 :

R: Operateur && et boucle IF


Sujet :

R

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 2
    Points : 3
    Points
    3
    Par défaut R: Operateur && et boucle IF
    Je débute en R et je rencontre un problème. J'ai l'impression que c'est a cause de ma condition dans le IF mais je ne suis pas sure.

    Mes données sont ici:
    Nom : kaWGS.png
Affichages : 349
Taille : 17,5 Ko

    Et mon programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    ################## Model Input ##################
    fact <- 1.46
     
    file_r <- file2[file2$G == 0,]  #delete the row where G == 1
     
    C_Agents <- sum(file2$G == 1 & file2$A == "Tiger")
    NC_Agents <- sum(file2$G == 1 & file2$A == "Lion")
     
    ################## Model Run ##################
    for (i in nrow(file_r)) {
      i <- i+1
      rand2 <- 0.2
      Affinity <- file_r$C/file_r$E + (rand2 *file_r$F*file_r$H)
      if((file_r$A == "Tiger") && (Affinity < (file_r$B) * (file_r$D))){
        Tiger_lost <- sum(file_r$A == "Tiger")
        file_r$A <- "Lion" #switch Tiger to Lion 
      } else if((file_r$A == "Lion") && (Affinity < (file_r$B) * (file_r$D) * fact)){
        Tiger_gained <- sum(file_r$A == "Lion")
        file_r$A <- "Tiger" #switch Lion to Tiger
      }
    }
     
    ################## Model Output ##################     
    C_Agents
    NC_Agents
    Tiger_lost 
    Tiger_gained
    Le résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > C_Agents
    [1] 2
    > NC_Agents
    [1] 5
    > Tiger_lost 
    [1] 3
    > Tiger_gained
    Error: object 'Tiger_gained' not found
    Le soucis est que la condition ELSE IF est atteinte une fois ici normalement:
    Nom : p9k6c.png
Affichages : 292
Taille : 7,5 Ko

    Je ne comprends pas pourquoi la condition n'est jamais atteinte alors que c'est censé l'être puisque la condition (file_r$A == "Tiger") && (Affinity < (file_r$B) * (file_r$D)) n'est pas respectée, donc on continue dans le ELSE IF et la condition (file_r$A == "Lion") && (Affinity < (file_r$B) * (file_r$D) * fact) est respectée. Donc la première colonne est censée être changée en "Tiger"

    Merci de votre aide !

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Boucle for
    Bonjour,

    Le problème vient de votre boucle qui n'est exécutée qu'une fois pour i = nrow(file_r).

    Si vous voulez que i aille de 1 à nrow(file_r), il faut écrire for (i in 1:nrow(file_r)). De plus sauf cas particulier on n'incrémente pas le compteur à l'intérieur d'une boucle for. Vous pouvez ajouter l'instruction print(i) à l'intérieur de la boucle pour voir ce qui se passe.

    Cordialement,

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