Ich habe eine Funktion f(var1, var2)
in R. Angenommen, wir setzen var2 = 1
und jetzt möchte ich die Funktion f()
auf die Liste anwenden L
. Grundsätzlich möchte ich eine neue Liste L * mit den Ausgängen erhalten
[f(L[1],1),f(L[2],1),...,f(L[n],1)]
Wie mache ich entweder mit dieser apply
, mapply
oder lapply
?
Antworten:
Übergeben Sie einfach var2 als zusätzliches Argument an eine der Apply-Funktionen.
Dies gilt
var2
für jeden Anruf vonmyfxn
. Wenn Sie stattdessen möchten, dass jeder Anruf vonmyfxn
den 1. / 2. / 3. / etc. Erhält . Element von beidenmylist
undvar2
, dann bist du inmapply
der Domäne.quelle
myfxn
es vektorisiert sein kann, in welchem Fall man verwenden solltemyfxn(unlist(mylist), var2=var2)
sapply(mylist, function(var1, var2) { var1*var2 }, var=thisvar2)
Aber ich bekomme eine Fehlermeldung, dass Argument 2 mit mehreren formalen Argumentenvar
anstelle von übergebenvar2
. R kann nicht erraten, was du meinst.Wenn Ihre Funktion zwei Vektorvariablen hat und sich für jeden Wert von ihnen selbst berechnen muss (wie von @Ari B. Friedman erwähnt), können Sie
mapply
Folgendes verwenden:was dir gibt:
quelle
mapply
wird auch recycelt, wennvars1
ein einzelnes Element vorhanden ist. Zum Beispiel wennvars1 <- 3
,mapply(mult_one, vars1, vars2)
kehrt zurück30 60 90
. Dies ist nützlich, wenn Sielapply
das zweite Argument einer Funktion verwenden möchten .Die weitere Verallgemeinerung des Beispiels von @ Alexander
outer
ist in Fällen relevant, in denen sich eine Funktion für jedes Paar von Vektorwerten selbst berechnen muss :gibt:
quelle