Auspacken argument-Listen für drei Punkte im R
Ich bin verwirrt durch die Verwendung der Ellipse (...
) bei einigen Funktionen, wie z.B. der übergeben wird ein Objekt mit den Argumenten als ein einziges argument.
In Python heißt es "Auspacken argument-Listen", z.B.
>>> range(3, 6) # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args) # call with arguments unpacked from a list
[3, 4, 5]
In R zum Beispiel, Sie haben die Funktion file.path(...)
verwendet eine Ellipse. Ich möchte dieses Verhalten:
> args <- c('baz', 'foob')
> file.path('/foo/bar/', args)
[1] 'foo/bar/baz/foob'
Stattdessen bekomme ich
[1] 'foo/bar/baz' 'foo/bar/foob'
wo die Elemente der args
sind nicht "ausgepackt" und bewertet in der gleichen Zeit. Gibt es ein R entspricht Pythons *arg
?
InformationsquelleAutor mhermans | 2010-08-05
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die syntax ist nicht so schön, aber dies funktioniert der trick:
do.call
nimmt zwei Argumente: eine Funktion und eine Liste von Argumenten, die zum aufrufen dieser Funktion mit.Können Sie extrahieren Informationen aus der Ellipse durch den Aufruf
list(...)
innerhalb der Funktion. In diesem Fall die info in der Ellipse verpackt wird, als ein list-Objekt. Zum Beispiel:Erreichen Sie das gewünschte Verhalten aus vektorisierte Funktionen wie
file.path
mit einem Aufrufdo.call
, das ist manchmal einfacher zu verwenden, mit dem wrappersplat
(in derplyr
Paket)Es dauerte eine Weile, um es zu finden, aber die
purrr
Paket hat einen Gegenwert zuplyr::splat
: es heißtlift_dl
."Dl" im Namen steht für "dots Liste", denn es ist Teil einer Reihe von
lift_xy
Funktionen, die verwendet werden können, um "lift" der Domäne, der eine Funktion aus einer Art von input-auf eine andere Art, diese "Arten" als Listen, Vektoren und Punkte.Seit
lift_dl
ist wahrscheinlich der nützlichste von diesen, gibt es eine einfachelift
alias für es vorgesehen.Wiederverwenden obigen Beispiel: