2016-05-13 7 views
2

geliefert wird Ich habe eine Funktion, z. fun(a, b = 1, c = 3, ...), die eine Reihe von Argumenten enthält, von denen einige Standardwerte haben. Ich möchte diese Funktion mit lapply(X, FUN, ...) aufrufen, aber explizit angeben, welches Argument ich gerne X liefern möchte. In dem obigen Beispiel könnte der X Vektor für a oder b oder c oder xyz in der ... geliefert werden.Geben Sie an, welches Argument von X in Lapply

Normalerweise könnte ich lapply(1:5, fun, a = 4) anrufen und ich stelle mir vor, es würde 1:5 als b Argument verwenden.

  • Gibt es eine Möglichkeit, das expliziter zu machen?
  • Was ist, wenn ich das Standardargument für b verwenden und 1:5 für c verwenden möchte?
  • Was ist, wenn ich 1:5 als xyz Argument in der ... verwenden möchte?
+1

Bitte geben Sie ein reproduzierbares Beispiel und erwartete Ausgabe – akrun

+0

Die allgemeine Syntax sollte 'lapply arbeitet (1: 5, Funktion (x, a = 4, ..,) {}) ' – OdeToMyFiddle

+0

Warum würden Sie _want_ andere Variablen an die Funktion übergeben wollen? 'lapply' selbst wird Ihnen nur einen einzigen Eintrag von der Liste geben, auf der es läuft. –

Antwort

4

Normalerweise könnte ich lapply(1:5, fun, a = 4) nennen und ich denke, es wäre Verwende 1: 5 als b-Argument.

Ja, Ihre Vorstellungskraft ist richtig. lapply verwendet den Positionsabgleich, um den Parameter X an die Funktion zu übergeben. Normal rules of argument matching gilt, was bedeutet, dass die genaue Übereinstimmung der benannten Parameter Vorrang hat.

Eine Alternative wäre natürlich fun in einer anonymen Funktion zu wickeln:

lapply(1:5, function(b, a, ...) fun(a = a, b = b, ...), a = 4) 
2

Eine Möglichkeit, Fall zu behandeln, wäre die Verwendung einfach Ihre eigene Funktion innerhalb der benutzerdefinierten Funktion aufzurufen, die lapply Ihnen aussetzt:

lst <- list(v1=c(1:3), v2="Hello", v3=5) 

result <- lapply(lst, function(x) { 
         y <- FUN(x, a, b, c, ...) # Here FUN() is your own function 
         return(y) 
         }) 
Verwandte Themen