81 votes

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

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

72voto

John Zwinck Points 43636

Le mot utilisé pour décrire ... est "ellipsis". En sachant cela, la recherche d'informations sur la construction devrait être plus facile. Par exemple, le premier résultat sur Google est une autre question sur ce site : Comment utiliser la fonction d'ellipse de R lorsque vous écrivez votre propre fonction ?

51voto

Richie Cotton Points 35365

Un petit exemple pour vous aider à démarrer.

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 facile de la convertir en une liste (1). L'utilisation principale est cependant de passer des arguments aux sous-fonctions, ce qui ne nécessite aucune conversion (2).

19voto

aL3xa Points 10236

Vous devriez vous rendre à la section "Définition du langage R". 2.1.9 Point-point-point . Il est fourni avec l'installation de R. Exécuter help.start() dans une session interactive pour faire apparaître l'aide HTML, puis cliquez sur Définition du langage R lien. Vous pouvez utiliser PDF o HTML à partir du site principal également.

De toute façon, ... est utilisé pour correspondre aux 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 réussi trim = .5 bien qu'il ne soit pas spécifié comme un argument formel de la fonction sapply fonction.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X