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 :

Problème de recuperation des valeurs d'un data frame dans une fonction


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Par défaut Problème de recuperation des valeurs d'un data frame dans une fonction
    Bonjour,

    J'ai à traiter des résultats d'analyses réalisés à différentes températures (et qui doivent donc être corrigés par un facteur multiplicatif donné par le constructeur de l'appareil de prise de mesure).

    Etant donné le nombre de mesures, j'ai voulu créer une fonction sur R, qui prend en argument une température et à partir d'un tableau fourni contenant les facteurs de corrections aux différentes températures retourne le bon facteur multiplicatif.
    Seulement mon programme retourne des résultats plus qu'étranges. Pour certaines températures il retourne le bon facteur, pour d'autres, il retourne le facteur de la colonne d'à côté et je ne comprend vraiment pas d'où cela vient.
    Peut être que je n'importe pas le tableau de facteurs de correction de la bonne façon ?
    D'autant plus que si je demande de retourner l'élément contenu dans le tableau pour la même ligne et même colonne que celle retournée par la fonction mais depuis la console ou bien dans le script mais en dehors de la fonction là j'obtiens le bon résultat.

    Mon tableau de facteurs de corrections se présente de la façon suivante :

    La première colonne contient la partie entière de la température (donc varie de 3 à 28 pour 3°C à 28°C) les colonnes suivantes contiennent les facteurs corrections en fonction de la partie décimale de la température (précision au dixième), donc la ligne 1 colonne 2 contient la facteur de correction pour la température de 3,0°C, la ligne 1 colonne 6 le facteur de température pour 3,5°C ...

    Nom : table_donnees.PNG
Affichages : 410
Taille : 25,9 Ko

    (en jaune sont surlignées 2 valeurs avec lesquelles le problème se pose, en effet pour la température 17,4°C la fonction retourne le facteur correspondant à 17,3°C, par contre pour 17,3°C il retourne le bon facteur)
    Même problème avec 17,2°C, il retourne le facteur correspondant à 17,1°C. Étrangement le problème ne se pose pas pour 17,8°C ni pour 8,2°C ou 8,4°C
    Le script est le suivant :

    Nom : script1.PNG
Affichages : 307
Taille : 19,9 Ko
    Nom : script2.PNG
Affichages : 325
Taille : 9,4 Ko

    Et ci-dessous les retours que j'obtiens :

    Nom : pb_fonction.PNG
Affichages : 298
Taille : 4,7 Ko
    Nom : pb_fonction2.PNG
Affichages : 325
Taille : 2,6 Ko


    Du coup si quelqu'un d'entre vous a déjà rencontré ce type de problème ou bien a une idée d'où il pourrait venir cela m'aiderait beaucoup.
    Merci d'avance et bonne soirée

  2. #2
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    Par défaut Codage des nombres
    Bonjour,

    Il est préférable de copier-coller le code et de fournir des données pour le tester.

    • Le problème vient du codage des nombres :

    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
    > T <- 17.3
    > int_T=floor(T)
    > dec_T=(T-int_T)*10
    > dec_T
    [1] 3
    > as.character(dec_T)
    [1] "3.00000000000001"
    > 
    > T <- 17.4
    > int_T=floor(T)
    > dec_T=(T-int_T)*10
    > dec_T
    [1] 4
    > as.character(dec_T)
    [1] "3.99999999999999"
    • Votre programme fonctionne correctement en prenant l'arrondi : dec_T=round((T-int_T)*10).

    • Une alternative pour accéder au tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    > Tab_corr_T <- data.frame(Int_T=17,C0=1.196,C1=1.193,C2=1.191,C3=1.188,C4=1.185,
    +                                   C5=1.182,C6=1.179,C7=1.177,C8=1.174,C9=1.171)
    > row.names(Tab_corr_T) <- Tab_corr_T$Int_T
    > names(Tab_corr_T) <- c("Int_T","0","1","2","3","4","5","6","7","8","9")
    > 
    > fact_corr_T <- function(T,tableau_corrections=Tab_corr_T){
    +   int_T <- floor(T)
    +   dec_T  <- round((T-int_T)*10)
    +   return(tableau_corrections[as.character(int_T),as.character(dec_T)])
    + }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > fact_corr_T(17.1)
    [1] 1.193
    > fact_corr_T(17.2)
    [1] 1.191
    > fact_corr_T(17.3)
    [1] 1.188
    > fact_corr_T(17.4)
    [1] 1.185
    Cordialement,

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Par défaut
    Oh merci beaucoup pour cette réponse !

    (Et désolée pour le copier-coller je n'ai pas l'habitude des forums de questions mais je note pour la prochaine fois )

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

Discussions similaires

  1. parser un fichier et recuperer des valeurs que l'on stocke dans un tableau
    Par they_are_numbers dans le forum Général Python
    Réponses: 22
    Dernier message: 04/04/2014, 18h04
  2. [MySQL] recuperation des valeurs de zone de text dans datagrid
    Par dimainfo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/07/2009, 15h26
  3. Réponses: 3
    Dernier message: 08/01/2009, 14h44
  4. Réponses: 2
    Dernier message: 14/05/2007, 15h10
  5. Réponses: 3
    Dernier message: 12/06/2006, 12h04

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