salut,
je suis débutant avec R langue
mon but est savoir comment écrire une fonction.
merci d'avance
Version imprimable
salut,
je suis débutant avec R langue
mon but est savoir comment écrire une fonction.
merci d'avance
Pour bien résoudre cette fonction on doit diviser les problèmes.
En premier lieu :
l'appel au nom et prenom se fait par :
..ici déclarer variable ageCode:
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
l'affichage finale se fait par
Code:paste('Bonjour je m\'appelle', nom, 'et j\'ai', age, 'ans', sep=' ')
La déclaration de fonction se fait par
Code:
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=' ') }
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)
donc le problème est de trouver l'équivalent de cette fonction mais en R langageCode:
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
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
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) :
Voici comment l'utiliser :Code:
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 }
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:
1
2
3
4 > calc_age("15/12/2008", "25/12/2010") [1] 2 > calc_age("15/12/2008", "14/12/2010") [1] 1
Code:calc_age("15/12/2008", format(Sys.Date(), "%d/%m/%Y"))
merci pour votre réponse
donc maintenant je dois utiliser cette fonctiondans ma fonction principaleCode:
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 }
lors de l'exécution cette erreur est affichéCode:
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=' ') }
il n'accepte que des valeurs numeriquesCode:
1
2 Erreur dans scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : scan() attendait 'a real' et a reçu 'franco'
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:
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)
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:
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)
Au passage, readLines(n=1) peut aussi s'écrire readline(), plus simplement...