2013-01-20 12 views
52

(dies eine sehr einfache Frage sein muss, aber bisher nicht ich eine Antwort in R-Handbuch finden ...)Bestehen mehr Argumente zu FUN von lapply (und andere * gelten)

wenn ich lapply verwenden mit die Syntax von lapply(input, myfun); - Dies ist leicht verständlich, und ich kann wie die definiert myfun:

myfun <- function(x) { 
# doing something here with x 
} 

lapply(input, myfun); 

und Elemente der inputx als Argument an myfun geben werden.

Aber was, wenn ich noch weitere Argumente an myfunc übergeben muss? Zum Beispiel ist es so definiert:

myfun <- function(x, arg1) { 
# doing something here with x and arg1 
} 

wie kann ich diese Funktion mit dem Führen beiden input Elemente (wie x Argument) und einige anderen Argumente?

Vielen Dank im Voraus!

+0

Abschluss R Konsoleneingangsleitungen mit " " ist ein Zeichen dafür, dass Sie in der Vergangenheit wahrscheinlich eine Makroverarbeitungssprache verwendet haben. Das Tripelpunkt-Argument wird in Abschnitt 4 des Abschnitts "Einführung in R" im Abschnitt "Eigene Funktionen schreiben" beschrieben, wohl das erste "Handbuch", das Sie lesen sollten. –

Antwort

63

Wenn Sie die Hilfeseite nachschlagen, ist eines der Argumente für lapply das mysteriöse .... Als wir im Abschnitt Argumente der Seite Hilfe suchen, so finden wir die folgende Zeile:

...: optional arguments to ‘FUN’. 

Also alles, was Sie tun müssen, ist Ihr anderes Argument in dem lapply Aufruf als Argument enthalten, etwa so:

lapply(input, myfun, arg1=6) 

und lapply, zu erkennen, dass arg1 ist kein Argument es weiß, was zu tun ist, wird es automatisch weiterleiten an myfun. Alle anderen apply Funktionen können das gleiche tun.

Ein Addendum: Sie können ... verwenden, wenn Sie Ihre eigenen Funktionen auch schreiben. Angenommen, Sie schreiben eine Funktion, die zu einem Zeitpunkt plot aufruft, und Sie möchten die Plotparameter von Ihrem Funktionsaufruf ändern können. Sie könnten jeden Parameter als Argument in Ihre Funktion aufnehmen, aber das ist ärgerlich. Stattdessen können Sie ... (als Argument sowohl für Ihre Funktion als auch für den Aufruf, darin zu plotten) verwenden und jedes Argument, das Ihre Funktion nicht erkennt, automatisch an plot weiterleiten.

+0

Was ist, wenn Ihr zweites Argument, z. B. "arg1", eine Liste ist, die mit der "Eingabe" -Liste übereinstimmt? Wenn ich versuche _lappli (input, myfun, arg1 = input2) _ wo input2 ist eine Liste, es sieht aus wie lapply übergibt die gesamte Liste auf einmal statt element für element wie bei 'input'. – Alan

+5

Ich habe gerade eine Antwort in einem anderen Beitrag gefunden, der funktioniert: mapply (myfun, df $ input, df $ input2) – Alan

4

Sie können es in der folgenden Art und Weise tun:

myfxn <- function(var1,var2,var3){ 
     var1*var2*var3 

    } 

    lapply(1:3,myfxn,var2=2,var3=100) 

und Sie werden die Antwort bekommen:

[[1]] [1] 200

[[2]] [1] 400

[[3]] [1] 600

+1

danke, aber diese Antwort ist bereits oben angegeben –