3.1 Les Fonctions

Pour aller un peu plus loin nous allons aborder, un autre concept fondamental de R, à savoir les fonctions. Une fonction se caractérise de la manière suivante :

  • elle a un nom;

  • elle a une liste d’arguments, avec éventuellement des valeurs par défaut;

  • elle retourne un résultat ou effectue une action comme dessiner un graphique, lire un fichier, etc.

L’appel d’une fonction se fait typiquement comme suit

val.1, val.2, …, sont les valeurs attribuées aux arguments arg.1, arg.2, ….Lorsqu’on passe un argument à une fonction de cette manière, c’est-à-dire sous la forme nom=valeur, on parle d’argument nommé.

Illustrons cela avec la fonction seq, qui produit une suite (séquence) de nombres:

[1] 1 3 5 7 9

Certains arguments peuvent être facultatifs et ont des valeurs par défaut prédéfinies, par exemple, si on omet by, R utilise by = 1:

[1] 1 2 3 4 5 6 7 8 9

Pour connaître les valeurs par défaut, les autres utilisations de la fonction et le type de résultat qu’elle retourne, vous pouvez accéder à l’aide en tapant help(nom.fonct) ou ?nom.fonct.

Cette commande affiche une page (en anglais) décrivant la fonction, ses paramètres, son résultat, ….

Dans la section Usage du fichier d’aide, les arguments, suivi par le symbole = ont une valeur par défaut. Il n’est donc pas nécessaire de les inclure dans l’appel de la fonction, auquel cas la valeur pas défaut sera prise en compte. Tous les autres arguments doivent recevoir une valeur.

La majorité des fiches d’aide comportent des exemples d’utilisation de la fonction à la fin. Ces exemples sont souvent très utiles pour comprendre comment utiliser la fonction.

Chaque fonction a un ordre par défaut pour ces arguments (voir la section Usage du fichier d’aide de la fonction). L’ordre des arguments est important:

  • Si vous fournissez les arguments dans l’ordre prédéfini, alors ils n’ont pas besoin d’être nommés
  • s’ils ne sont pas appelés dans l’ordre, alors il est nécessaire de les nommer .

Notez que les noms formels peuvent être abrégés tant que l’abréviation n’est pas ambiguë. Ainsi les commandes suivantes produisent toutes le même résultat.

[1] 1 3 5 7 9
[1] 1 3 5 7 9
[1] 1 3 5 7 9
[1] 1 3 5 7 9

Pour éviter toute surprise, il est conseillé de nommer tous les arguments lorsqu’on fait appel à une fonction.

[1] 1

Quelques fonctions utiles

Dans les exemples suivant x<-c(4, -1, 2, 6, 2) .

Fonction Utilité Exemple Sortie
: générer des nombres 1:5 1, 2, 3, 4, 5
3:0 3, 2, 1, 0
seq générer une séquence selon une règle. seq(1, 2, by = 0.3) 1, 1.3, 1.6, 1.9
seq(1, 2, length = 5) 1, 1.25, 1.5, 1.75, 2
rep répéter rep(2, 4) 2, 2, 2, 2
rep(c(2, 5), c(1, 2)) 2, 5, 5
round arrondir round(0.555, 1) 0.6
round(c(0.555, 1.2), 0) 1, 1
sort tri croissant ou décroissant sort(x) -1, 2, 2, 4, 6
sort(x, decreasing = TRUE) 6, 4, 2, 2, -1
order rang du plus petit au plus grand ou l’inverse order(x) 2, 3, 5, 1, 4
order(x, decreasing = TRUE) 4, 1, 3, 5, 2
unique extraction les éléments différents unique(x) 4, -1, 2, 6
length taille d’un vecteur length(x) 5
%in% appartenance d’une ou plusieurs valeurs à un vecteur (-1:2) %in% x TRUE, FALSE, FALSE, TRUE
ifelse instructions conditionnelles ifelse(x>=0, x-1, x+1) 3, 0, 1, 5, 1
paste concaténation paste(“Hello”, “world”, sep = " ") Hello world
paste(“Face”, 1:6, sep = "_") Face_1, Face_2, Face_3, Face_4, Face_5, Face_6
sum somme sum(x) 13
prod produit prod(x) -96
min minimum min(x) -1
max maximum max(x) 6
which.min position du minimum which.min(x) 2
which.max position du maximum which.max(x) 4

L’opérateur : est bel et bien une fonction comme les autres. En effet, au lieu de taper 1:5, on peut très bien écrire “:”(1,5). Cela est aussi le cas de beaucoup d’autres opérateurs tel que +, -, *, %in%, ….

L’argument na.rm

Imaginons que la deuxième personne interrogée n’ait pas voulu nous répondre. Nous avons alors dans notre vecteur une valeur manquante.

Par défaut, R renvoie NA pour un grand nombre d’opérations lorsque les données comportent une valeur manquante. On peut cependant facilement modifier ce comportement :

Assigner la valeur TRUE (VRAI) à l’argument na.rm indique à la fonction sum de ne pas tenir compte des valeurs manquantes dans le calcul.

Créer sa propre fonction

On peut aussi créer sa propre fonction. Une nouvelle fonction est créée par une construction de la forme :

                    fun.name <- function( arglist ) {
                    expr
                    } 

avec :

  • fun.name : le nom d’un objet où est stockée la fonction.
  • arglist : une liste d’arguments formels séparés par des virgules.
  • expr : un bloc d’expressions (code R) se terminant typiquement par return(val) qui arrête la fonction et renvoie la valeur val.

Voici une fonction qui calcule l’indice de masse corporelle (imc) :

 [1] 30.837 20.074 27.732 16.515 26.366 23.665 22.571 14.901 18.819 19.031