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 avec une fonction


Sujet :

R

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 180
    Points : 73
    Points
    73
    Par défaut problème avec une fonction
    salut,

    je suis débutant avec R langue

    mon but est savoir comment écrire une fonction.



    merci d'avance

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 180
    Points : 73
    Points
    73
    Par défaut
    Pour bien résoudre cette fonction on doit diviser les problèmes.

    En premier lieu :

    l'appel au nom et prenom se fait par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    print( "taper le nom" )
    nom <-  scan(nmax=1)
    print( "taper le prenom" )
    prenom <-  scan(nmax=1)
    print( "taper la date de naissance" )
    dateNaissance <-  ........ ICI le problème
    ..ici déclarer variable age

    l'affichage finale se fait par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    paste('Bonjour je m\'appelle', nom, 'et j\'ai', age, 'ans', sep=' ')

    La déclaration de fonction se fait par

    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
    affichage<-function()
    {
     
    print( "taper le nom" )
    nom <-  scan(nmax=1)
    print( "taper le prenom" )
    prenom <-  scan(nmax=1)
    print( "taper la date de naissance" )
    dateNaissance <-  ........ ICI le problème
     
    ..ici déclarer  variable age
    // récupérer la date système
    // faire de boucle for pour calculer l'age ( comparer le mois et l'année entre date de naissance saisie et date système
     
     
    paste('Bonjour je m\'appelle', nom, 'et j\'ai', age, 'ans', sep=' ')
     
     
    }

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 180
    Points : 73
    Points
    73
    Par défaut
    je trouve une fonction qui permet de calculer l'age mais en .net

    cette fonction nécessite la récupération de date système ( mois , jours , année)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Protected Sub calcul_age()
        Dim datetimenow = DateTime.Now
        Dim datedenaissance = CDate(TbDn.Text)
        Dim age As Integer
        age = CInt(Now.Year - datedenaissance.Year)
        If (datedenaissance.Month > Now.Month) Then
        age = age - 1
        End If
        If ((datedenaissance.Month = Now.Month) And (datedenaissance.Day > Now.Day)) Then
        age = age - 1
        End If
        Me.Label3.Text = " Age : " & age & " ans"
        End Sub
    donc le problème est de trouver l'équivalent de cette fonction mais en R langage

  4. #4
    Membre habitué
    Homme Profil pro
    Analyste
    Inscrit en
    Février 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste

    Informations forums :
    Inscription : Février 2012
    Messages : 62
    Points : 143
    Points
    143
    Par défaut
    Bonjour,

    Pour vous éviter de trop tourner, la fonction qui retourne la date actuelle est Sys.Date(), pour l'aide sur cette fonction ?Sys.Date() (si vous programmez directement sous la console R, une petite pression sur la touche tab vous indique les fonctions et objets présents en mémoire qui contiennent ce que vous avez écrit jusque là (comme dans l'invite de commandes windows), ici avec Sys il vous proposera Sys.Date (entre autres).

    À bientôt.

    Ps: Site bien fait et qui aborde de nombreux sujets auxquels on peut être confronté en R http://www.duclert.org/Aide-memoire-...troduction.php

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Voici une fonction pour calculer l'âge entre 2 dates (qui sont passées en chaînes de caractères sous le format dd/mm/yyyy) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    calc_age <- function(from, to)
    {
         lt <- as.POSIXlt(c(from, to), format = "%d/%m/%Y")
         age <- lt$year[2] - lt$year[1]
         mons <- lt$mon + lt$mday/50
         if(mons[2] < mons[1]) age <- age -1
         age
    }
    Voici comment l'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    > calc_age("15/12/2008", "25/12/2010")
    [1] 2
    > calc_age("15/12/2008", "14/12/2010")
    [1] 1
    Et pour donner l'âge à partir d'une date en comparaison avec la date du jour, il suffit de passer la date du jour (Sys.date()) dans le bon format :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    calc_age("15/12/2008", format(Sys.Date(), "%d/%m/%Y"))
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 180
    Points : 73
    Points
    73
    Par défaut
    merci pour votre réponse

    donc maintenant je dois utiliser cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    calc_age <- function(from, to)
    {
         lt <- as.POSIXlt(c(from, to), format = "%d/%m/%Y")
         age <- lt$year[2] - lt$year[1]
         mons <- lt$mon + lt$mday/50
         if(mons[2] < mons[1]) age <- age -1
         age
    }
    dans ma fonction principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Affichage <- function()
    {
    print( "taper le nom" )
    nom <-  scan(nmax=1)
    print( "taper le prenom" )
    prenom <-  scan(nmax=1)
    print( "taper la date de naissance" )
    dateNaissance <- scan(nmax=1)
     
    age <-calc_age(dateNaissance , format(Sys.Date(), "%d/%m/%Y"))
    paste('Bonjour je m\'appelle', nom,prenom, 'et j\'ai', age, 'ans', sep=' ')
     
    }
    lors de l'exécution cette erreur est affiché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur dans scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
      scan() attendait 'a real' et a reçu 'franco'
    il n'accepte que des valeurs numeriques

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 180
    Points : 73
    Points
    73
    Par défaut
    Je veux juste pouvoir saisir une chaine de caractères.

    La saisie d'une valeur numérique se fait par la fonction scan() ou bien scan(nmax=..).

    Mais ça ne marche pas pour une chaine de caractères.

    Mon but est de saisir trois chaines : nom, prénom et date de naissance.

    J'essaye avec ce code mais il m'affiche des erreurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    print( "taper le nom" )
    nom <-  scan(nmax=1)
    print( "taper le prenom" )
    prenom <-  scan(nmax=1)
    print( "taper la date de naissance" )
    dateNaissance <- scan(nmax=1)

  8. #8
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Le problème vient du fait que vous utilisez la fonction scan, qui attend un nombre, alors que pour la saisie d'une chaîne de caractères, c'est plutôt la fonction readLines qu'il faut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    print( "taper le nom" )
    nom <-  readLines(n=1)
    print( "taper le prenom" )
    prenom <-  readLines(nmax=1)
    print( "taper la date de naissance" )
    dateNaissance <- readLines(nmax=1)
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  9. #9
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Au passage, readLines(n=1) peut aussi s'écrire readline(), plus simplement...
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

Discussions similaires

  1. Problème avec une fonction
    Par mademoizel dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/06/2006, 10h51
  2. problème avec une fonction javaScript
    Par volthur dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/05/2006, 18h04
  3. Problème avec une fonction utilisateur !
    Par nalou dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/04/2006, 17h06
  4. Problème avec une fonction et un array
    Par Neal Morse dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/08/2005, 12h04
  5. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33

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