web-dev-qa-db-fra.com

Utilisation de `... '(trois points ou point à point) dans les fonctions

Où puis-je trouver de la documentation sur l'utilisation de ... dans les fonctions? Des exemples seraient utiles.

80

Le mot utilisé pour décrire ... est "Ellipsis". Le savoir devrait faciliter la recherche d'informations sur la construction. Par exemple, le premier hit sur Google est une autre question sur ce site: Comment utiliser la fonction Ellipsis de R lors de l'écriture de votre propre fonction?

72
John Zwinck

Un petit exemple pour commencer.

f <- function(x, ...)
{
  dots <- list(...)                   #1
  if(length(dots) == 0) return(NULL) 
  cat("The arguments in ... are\n")
  print(dots)
  f(...)                              #2
}

f(1,2,3,"a", list("monkey"))

La fonction, f, stocke tout sauf le premier argument d'entrée dans la variable Ellipsis. Pour accéder à son contenu, il est plus simple de le convertir en liste (1). Cependant, l'utilisation principale est de passer des arguments aux sous-fonctions, ce qui ne nécessite aucune conversion (2).

50
Richie Cotton

Vous devriez vous diriger vers "Définition du langage R", section 2.1.9 Point-point-point. Il est livré avec l'installation de R. Exécutez help.start() dans une session interactive pour afficher l'aide HTML, puis cliquez sur le lien La définition du langage R. Vous pouvez également utiliser la version PDF ou HTML du site principal.

Quoi qu'il en soit, ... Est utilisé pour faire correspondre les arguments formels non spécifiés d'une fonction.

args(sapply)                                                                                                               
function (X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)                                                                    
NULL   

sapply(mtcars, mean, trim = .5)                                                                                            
    mpg     cyl    disp      hp    drat      wt    qsec      vs      am    gear                                              
 19.200   6.000 196.300 123.000   3.695   3.325  17.710   0.000   0.000   4.000                                              
   carb                                                                                                                      
  2.000 

Comme vous pouvez le voir, j'ai passé trim = .5 Bien qu'il ne soit pas spécifié comme argument formel de la fonction sapply.

(notez que cet exemple est trivial, vous pouvez utiliser sapply(mtcars, median) pour obtenir le même résultat)

19
aL3xa