Ecrire une fonction ayant un nombre variable d'arguments

Auteur.e.s
Annie Bouvier, Inra
Résumé

Un grand nombre de fonctions de R possède un argument particulier : ... (un série de 3 points). La fiche présente un exemple d’utilisation.

Exemple

L’exemple suivant montre comment récupérer le nom et la valeur des arguments passés à une fonction par l’argument ....

La fonction suivante mafonc() possède un argument obligatoire Oblig et la possibilité d’ajouter d’autres arguments non proposés par la fonction. Cette possibilité est liée à l’argument ....

mafonc <- function(Oblig, ...) {
    # Récupère le nombre d'arguments
    nbargs <- nargs()  #
    cat("Le nombre d'arguments effectifs est:", nbargs, "\n")
    
    lecall <- match.call()
    # match.call() renvoie une structure dont le 1ier composant est le nom
    # de la fonction les suivants, sont les arguments.
    
    # Le nom des arguments sont dans les 'names':
    cat("Les noms des arguments sont:", names(match.call()), "\n")
    for (i in seq(1, nbargs)) {
        argu <- eval(match.call()[[i + 1]], envir = parent.frame())  # la valeur du i-eme argument
        nom <- names(match.call())[i + 1]  # son nom
        cat("Le nom de l'argument", i, "est", nom, "et son contenu: \n")
        print(argu)
    }
    invisible()
}  # fin mafonc

Un premier exemple d’utilisation de la fonction ne fait appel qu’à l’argument obligatoire de la fonction.

mafonc(Oblig = matrix(1:4, ncol = 2))
Le nombre d'arguments effectifs est: 1 
Les noms des arguments sont:  Oblig 
Le nom de l'argument 1 est Oblig et son contenu: 
     [,1] [,2]
[1,]    1    3
[2,]    2    4

Le second exemple, utile la fonction avec 2 arguments

mafonc(Oblig = c(1, 3, 5), Autre = c(5, 6, 7, 8, 9, 10))
Le nombre d'arguments effectifs est: 2 
Les noms des arguments sont:  Oblig Autre 
Le nom de l'argument 1 est Oblig et son contenu: 
[1] 1 3 5
Le nom de l'argument 2 est Autre et son contenu: 
[1]  5  6  7  8  9 10

Pour aller plus loin: Introduction to R, paragraphe 10.4

Versions des outils utilisés
R version 3.4.2 (2017-09-28)
Thèmes de la fiche
Thèmes