Ich habe eine Frage zum Übergeben mehrerer Argumente an eine Funktion bei der Verwendung von lapply
in R
.
Wenn ich lapply mit der Syntax von verwende, ist lapply(input, myfun);
dies leicht verständlich und ich kann myfun so definieren:
myfun <- function(x) {
# doing something here with x
}
lapply(input, myfun);
und Elemente von input
werden als x
Argument an übergeben myfun
.
Aber was ist, wenn ich noch ein paar Argumente weitergeben muss myfunc
? Zum Beispiel ist es so definiert:
myfun <- function(x, arg1) {
# doing something here with x and arg1
}
Wie kann ich diese Funktion verwenden, um beide input
Elemente (als x
Argument) und ein anderes Argument zu übergeben?
Antworten:
Wenn Sie die Hilfeseite nachschlagen, ist eines der Argumente
lapply
das Geheimnisvolle...
. Wenn wir uns den Abschnitt Argumente auf der Hilfeseite ansehen, finden wir die folgende Zeile:Alles, was Sie tun müssen, ist, Ihr anderes Argument
lapply
als Argument in den Aufruf aufzunehmen:und zu
lapply
erkennen, dass diesarg1
kein Argument ist, mit dem es zu tun weiß, wird es automatisch an weiterleitenmyfun
. Alle anderenapply
Funktionen können dasselbe tun.Ein Nachtrag: Sie können ihn auch verwenden,
...
wenn Sie Ihre eigenen Funktionen schreiben. Angenommen, Sie schreiben eine Funktion, dieplot
irgendwann aufgerufen wird, und möchten die Plotparameter Ihres Funktionsaufrufs ä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 zum Plotten) verwenden und jedes Argument, das Ihre Funktion nicht erkennt, automatisch an weiterleitenplot
.quelle
Wie von Alan vorgeschlagen, wendet die Funktion 'Mapply' eine Funktion auf mehrere Mehrfachlisten oder Vektorargumente an:
Siehe Manpage: https://stat.ethz.ch/R-manual/R-devel/library/base/html/mapply.html
quelle
outer
in der gleichen Weise erwähnenswert , die eine Funktion auf jedes Wertepaar in zwei Vektorargumenten anwendet. Manpage: stat.ethz.ch/R-manual/R-devel/library/base/html/outer.htmlSie können dies folgendermaßen tun:
und Sie erhalten die Antwort:
[[1]] [1] 200
[[2]] [1] 400
[[3]] [1] 600
quelle
x
ist ein Vektor oder eine Liste undmyfun
inlapply(x, myfun)
wird für jedes Element der genanntenx
getrennt.Option 1
Wenn Sie möchten , verwenden ganze
arg1
in jedemmyfun
Anruf (myfun(x[1], arg1)
,myfun(x[2], arg1)
usw.), die Verwendunglapply(x, myfun, arg1)
(wie oben angegeben).Option 2
Wenn Sie jedoch wie rufen
myfun
zu jedem Elementarg1
neben Elemente getrenntx
(myfun(x[1], arg1[1])
,myfun(x[2], arg1[2])
etc.), ist es nicht möglich zu verwendenlapply
. Verwenden Sie stattdessenmapply(myfun, x, arg1)
(wie oben angegeben) oderapply
:oder
quelle