Mehrere Funktionen an FUN Argument aus lapply() übergeben

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
Bill
Beiträge: 35
Registriert: Fr Mär 06, 2020 8:04 pm

Mehrere Funktionen an FUN Argument aus lapply() übergeben

Beitrag 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
jogo
Beiträge: 2088
Registriert: Fr Okt 07, 2016 8:25 am

Re: Mehrere Funktionen an FUN Argument aus lapply() übergeben

Beitrag 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
Bill
Beiträge: 35
Registriert: Fr Mär 06, 2020 8:04 pm

Re: Mehrere Funktionen an FUN Argument aus lapply() übergeben

Beitrag 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
jogo
Beiträge: 2088
Registriert: Fr Okt 07, 2016 8:25 am

Re: Mehrere Funktionen an FUN Argument aus lapply() übergeben

Beitrag 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
Antworten