Seite 1 von 1
Mehrere Funktionen an FUN Argument aus lapply() übergeben
Verfasst: Mi Apr 15, 2020 6:48 pm
von Bill
Hallo Leute,
ich habe eine Liste, die 3 Vektoren beinhaltet.
Ich möchte über die lapply() Funktion nicht nur eine Funktion auf die 3 Elemente meiner Liste anwenden, sondern gleich mehrere Funktionen.
Wie kann ich das am Besten tun?
Dem FUN Argument einfach mehrere Funktionen zu übergeben klappt schonmal nicht wirklich.
Liebe Grüße
Bill
Re: Mehrere Funktionen an FUN Argument aus lapply() übergeben
Verfasst: Mi Apr 15, 2020 8:20 pm
von jogo
Hallo Bill,
bitte ein reproduzierbares Beispiel liefern
Mein Ansatz wäre:
1. eigene Funktion schreiben, die die drei verschiedenen Berechnungen durchführt und deren Ergebnisse am Ende in ein einziges Objekt packt (z.B. ein Vektor mit benannten Elementen oder eine Liste oder ...)
2. Diese eigene Funktion beim Aufruf von lapply() bei FUN= angeben.
Gruß, Jörg
Re: Mehrere Funktionen an FUN Argument aus lapply() übergeben
Verfasst: Mi Apr 15, 2020 10:15 pm
von Bill
Guten Abend,
ein Beispiel könnte wie folgt lauten:
Code: Alles auswählen
V1 <- 1:5
V2 <- 10:35
V3 <- 9:19
L1 <- list(V1 , V2 , V3)
lapply(L1 , FUN=mad,IQR)
Die help() Funktion von lapply zeigt auf, dass es ein Argument "..." nach dem FUN Argument gibt, dass für optionale Argumente für FUN gedacht ist.
Ich hätte gedacht, meine o.g. Codierung tut genau das, was ich ursprünglich wollte. Nämlich sowohl die Funktion mad() als auch die Funktion IQR() auf die Listenelemente anwenden. Tut diese aber leider nicht. Versteh ich das Argument "..." falsch?
Deine Idee ist natürlich eine Möglichkeit, über die ich nachdenken werde.
Liebe Grüße
Bill
Re: Mehrere Funktionen an FUN Argument aus lapply() übergeben
Verfasst: Mi Apr 15, 2020 11:00 pm
von jogo
Bill hat geschrieben: Mi Apr 15, 2020 10:15 pm
ein Beispiel könnte wie folgt lauten:
Code: Alles auswählen
V1 <- 1:5
V2 <- 10:35
V3 <- 9:19
L1 <- list(V1 , V2 , V3)
lapply(L1 , FUN=mad,IQR)
Bei mir sieht es so aus:
Code: Alles auswählen
V1 <- 1:5
V2 <- 10:35
V3 <- 9:19
L1 <- list(V1 , V2 , V3)
sapply(L1 , FUN=function(x) c(mad=mad(x),irq=IQR(x)))
Die help() Funktion von lapply zeigt auf, dass es ein Argument "..." nach dem FUN Argument gibt, dass für optionale Argumente für FUN gedacht ist.
Ich hätte gedacht, meine o.g. Codierung tut genau das, was ich ursprünglich wollte. Nämlich sowohl die Funktion mad() als auch die Funktion IQR() auf die Listenelemente anwenden. Tut diese aber leider nicht. Versteh ich das Argument "..." falsch?
Da hast Du etwas falsch verstanden.
(So ähnlich war das bei der Beschreibung des großen Plapperkäfers von Traal im Anhalter ...)
Es geht um folgendes:
Manche Funktionen haben zusätzliche Argumente, z.B. hat die Funktion mean() noch die Argumente
trim= und
na.rm=. Diese zusätzlichen Argumente können per
... an die Funktion übergeben werden, welche bei
FUN= angegeben ist:
Code: Alles auswählen
V1 <- c(1:5, NA)
V2 <- 10:35
V3 <- c(NA, 9:19)
L1 <- list(V1 , V2 , V3)
sapply(L1 , FUN=mean)
sapply(L1 , FUN=mean, na.rm=TRUE)
Gruß, Jörg