Uso de "…" (tres puntos o punto-punto-punto) en funciones [duplicar]


84

¿Dónde puedo encontrar documentación sobre el uso de ...funciones in? Serían útiles ejemplos.


3
Para los usuarios de Python aprender R, una respuesta rápida sería que ...es el equivalente de R entrada de palabras clave de Python ( def func(**kwargs))
Anna

Respuestas:


75

La palabra que se usa para describir ...es "puntos suspensivos". Saber esto debería facilitar la búsqueda de información sobre el constructo. Por ejemplo, el primer resultado en Google es otra pregunta en este sitio: ¿Cómo usar la función de puntos suspensivos de R al escribir su propia función?


3
En realidad, el nombre oficial en R es dots, por ejemplo, se nombra la página de ayuda ?dotsy la "puntos suspensivos" ni siquiera se menciona en la página
MichaelChirico

En cuanto a los archivos de ayuda, ?dotsno me funciona, pero ?'...'sí.
Coip

54

Un pequeño ejemplo para empezar.

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 función, falmacena todo menos el primer argumento de entrada en la variable de puntos suspensivos. Para acceder a su contenido, es más fácil convertirlo en una lista (1). Sin embargo, el uso principal es pasar argumentos a subfunciones, lo que no requiere conversión (2).


¿Por qué en el n. ° 2 volver a llamar a la misma función f?
Jiapeng Zhang

1
@JiapengZhang Es un ejemplo de función recursiva. f()se llama repetidamente con diferentes argumentos cada vez. Ejecute el código y vea si puede comprender lo que está sucediendo.
Richie Cotton

2
Esto sería un gran ejemplo para demostrar ...length()así
MichaelChirico

19

Debe dirigirse a "Definición del lenguaje R", sección 2.1.9 Punto-punto-punto . Viene incluido con la instalación R. Ejecute help.start()una sesión interactiva para que aparezca la ayuda HTML y haga clic en el enlace Definición del lenguaje R. También puede utilizar la versión PDF o HTML del sitio principal.

De todos modos, ...se usa para hacer coincidir argumentos formales no especificados de una función.

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 

Como puede ver, pasé trim = .5aunque no está especificado como un argumento formal de sapplyfunción.

(tenga en cuenta que este ejemplo es trivial, puede usarlo sapply(mtcars, median)para lograr el mismo resultado)


1
Si no está especificado, ¿cómo sabe que es legal o válido?
qed

@qed trimes un argumento de la meanfunción. Los ...in sapplyson el mecanismo al trimque se le pasará mean.
Richie Cotton
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.