Verwendung von `…` (drei Punkte oder Punkt-Punkt-Punkt) in Funktionen [Duplikat]

84

Wo finde ich Dokumentation zur Verwendung ...in Funktionen? Beispiele wären nützlich.

Brandon Bertelsen
quelle
3
Für Python-Benutzer, die R lernen, wäre eine schnelle Antwort, dass dies ...das R-Äquivalent von Pythons Schlüsselworteingabe ( def func(**kwargs)) ist
Anna

Antworten:

75

Das zur Beschreibung verwendete Wort ...ist "Auslassungspunkte". Wenn Sie dies wissen, sollte die Suche nach Informationen über das Konstrukt erleichtert werden. Der erste Treffer bei Google ist beispielsweise eine weitere Frage auf dieser Website: Wie wird die Ellipsenfunktion von R beim Schreiben Ihrer eigenen Funktion verwendet?

John Zwinck
quelle
3
Eigentlich ist der offizielle Name in R dots, zB die ?dots
Hilfeseite
In Bezug auf Hilfedateien ?dotsfunktioniert das bei mir nicht, ?'...'tut es aber .
Coip
53

Ein kleines Beispiel für den Einstieg.

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"))

Die Funktion f,, speichert alle bis auf das erste Eingabeargument in der Ellipsenvariablen. Für den Zugriff auf den Inhalt ist es am einfachsten, ihn in eine Liste zu konvertieren (1). Die Hauptverwendung besteht jedoch darin, Argumente an Unterfunktionen zu übergeben, für die keine Konvertierung erforderlich ist (2).

Richie Cotton
quelle
Warum in # 2 dieselbe f-Funktion erneut aufrufen?
Jiapeng Zhang
1
@JiapengZhang Dies ist ein Beispiel für eine rekursive Funktion. f()wird jedes Mal wiederholt mit unterschiedlichen Argumenten aufgerufen. Führen Sie den Code aus und prüfen Sie, ob Sie verstehen können, was passiert.
Richie Cotton
2
Dies wäre ein gutes Beispiel sein , zu zeigen , ...length()wie gut
MichaelChirico
20

Sie sollten zu "R-Sprachdefinition", Abschnitt 2.1.9 Punkt-Punkt-Punkt gehen . Es wird mit R-Installation geliefert. Führen Sie help.start()eine interaktive Sitzung aus, um die HTML-Hilfe aufzurufen, und klicken Sie auf den Link Die R-Sprachdefinition . Sie können auch die PDF- oder HTML- Version von der Hauptseite aus verwenden.

Auf jeden Fall ...wird verwendet, um nicht spezifizierte formale Argumente einer Funktion abzugleichen.

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 

Wie Sie sehen können, habe ich bestanden, trim = .5obwohl es nicht als formales sapplyFunktionsargument angegeben ist.

(Beachten Sie, dass dieses Beispiel trivial ist und Sie sapply(mtcars, median)das gleiche Ergebnis erzielen können.)

aL3xa
quelle
1
Wenn es nicht angegeben ist, woher wissen Sie, dass es legal oder gültig ist?
Qed
@qed trimist ein Argument für die meanFunktion. Die ...in sapplysind der Mechanismus, triman den übergeben werden soll mean.
Richie Cotton