Ecrire vos propres fonctions R

R permet ? l'utilisateur d'?crire ses propres fonctions.

Une fonction est d?finie de la forme suivante :

Code R :
name <- function(arg_1, arg_2, ...) expression


expression est une expression R, (habituellement une expression regroup?e), qui utilise les arguments, arg_i, pour calculer une valeur. La valeur de l'expression est la valeur retourn?e par la fonction.

Pour ex?cuter la fonction faire : name(arg_1, arg_2,...)

Un exemple simple

?crivons une fonction permettant de calculer le coefficient de variation (CV) d'une s?rie de valeur.

Le CV est d?finit comme ?tant le rapport de l'?cart type sur la moyenne des valeurs.

La fonction est d?finie comme suit :

Code R :
 
#x est un vecteur contenant une s?rie de valeurs
cv<-function(x){
moy<-mean(x) # moyenne de x
s<-sd(x)# ecart type de x
rslt<-s/moy # calcul du CV
rslt #la fonction retourne le r?sultat
}
 




D?finir de nouveaux op?rateurs binaires



Le nouvel op?rateur s'?crit : %anything%.

Supposons, par exemple, nous choisissons ! comme caract?re interne. La d?finition de la fonction serait comme suit:

Code R :
"%!%" <- function(X, y) { ... }


(Notez l'utilisation de guillemets.) La fonction pourrait alors ?tre utilis? comme X %!% y .


Les arguments de la fonction et les valeurs par d?faut




Si les arguments des fonctions appel?es sont donn?s de la forme "name = object ", ils peuvent ?tre dans n'importe quel ordre. Dans le cas contraire, il faut respecter l'ordre des arguments.

Ainsi, si il y a une fonction fun1 d?finie par :

Code R :
 
fun1 <- function(data, data.frame, graph, limit) {
         [function body omitted]
       }


Alors la fonction peut ?tre invoqu?e de plusieurs mani?res, par exemple:

Code R :
 
ans <- fun1(d, df, TRUE, 20)
ans <- fun1(d, df, graph=TRUE, limit=20)
 ans <- fun1(data=d, limit=20, graph=TRUE, data.frame=df)
 


Ces commandes sont toutes ?quivalentes.

Dans de nombreux cas les arguments peuvent ?tre des valeurs par d?faut couramment appropri?es, auquel cas ils peuvent ?tre omis lors de l'appel lorsque les valeurs par d?faut sont appropri?es. Par exemple, si fun1 ont ?t? d?finis comme :

Code R :
 
fun1 <- function(data, data.frame, graph=TRUE, limit=20) { ... }
 


il pourrait ?tre appel? comme :

Code R :
ans <- fun1(d, df)



qui est maintenant ?quivalente aux trois cas ci-dessus, ou en tant que :

Code R :
ans <- fun1(d, df, limit=10)


qui modifie l'un des param?tres par d?faut.

Il est important de noter que les arguments avec valeurs par d?faut peuvent ?tre des expressions arbitraires, m?me impliquant d'autres arguments de la m?me fonction. Ils ne sont pas limit?s ? ?tre des constantes, comme dans notre exemple simple ici.

L'argument '...'



L'argument '...' permet de passer un ensemble de param?tres d'une fonction ? un autre. Par exemple de nombreuses fonctions graphiques utilise la fonction par() et les fonctions comme plot() permettent ? l'utilisateur de passer des param?tres graphiques ? par() pour contr?ler la sortie graphique.

Cela peut ?tre fait en incluant un argument suppl?mentaire, litt?ralement ?...?, ? la fonction, qui peut ensuite ?tre transmis. Un exemple est donn? ci-dessous :

Code TEXT :
fun1 <- function(data, data.frame, graph=TRUE, limit=20, ...) {
       [omitted statements]
       if (graph)
         par(pch="*", ...)
       [more omissions]
     }



Les affectations au sein des fonctions



Notez que toutes les affectations ordinaires effectu?es au sein d'une fonction sont locales et temporaires et sont perdues apr?s la sortie de la fonction.

Pour faire une affectation globale au sein d'une fonction, il faut utiliser l'op?rateur de "superaffectation" <<- ou la fonction assign()


Enjoyed this article? I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Twitter, Facebook or Linked In.

Show me some love with the like buttons below... Thank you and please don't forget to share and comment below!!
Avez vous aimé cet article? Je vous serais très reconnaissant si vous aidiez à sa diffusion en l'envoyant par courriel à un ami ou en le partageant sur Twitter, Facebook ou Linked In.

Montrez-moi un peu d'amour avec les like ci-dessous ... Merci et n'oubliez pas, s'il vous plaît, de partager et de commenter ci-dessous!





Cette page a été vue 6603 fois
Licence - Pas d?Utilisation Commerciale - Partage dans les M?mes Conditions
Licence Creative Commons