Wat ass den Ënnerscheed tëscht sapply a lapply zu R? Wéini sollt Dir een géint deen aneren benotzen? Bonus: wéini sollt Dir vapply benotzen?


beäntweren 1:

Ech huelen un datt Dir scho wësst wat * Benotzt Funktioun maacht :-).

Den Haaptunterschied tëscht lapply a sapply ass datt sapply probéiert de lapply Output esou einfach wéi méiglech ze maachen. Wann Är Funktioun en eenzege Wäert fir all Element op der Lëscht bréngt, gëtt sapply e Vector mat deene Wäerter zréck, z.B. B. nëtzlech wann Dir d'Längt vun de Lëschte Saache wëllt.

Eng aner Méiglechkeet ass datt Är Funktioun Vecteure vun der selwechter Gréisst fir all Lëschtelement bréngt, z.B. B. Range a Quantefunktiounen. An dësem Fall bréngt sapply eng Matrix mat enger Unzuel vun Zeilen, déi mat der Längt vun Äre Vektore an enger Zuel vun de Sailen entsprécht, déi der Längt vun der Lëscht entsprécht.

Wann sapply d'Ausgang net vereinfachen kann, ass dat d'selwecht wéi lapply.

D'Onbedeitung vu sapply Rendement Wäerter (heiansdo eng Lëscht, heiansdo eng Matrix oder e Vector) mécht Package Entwécklung e bësse méi komplizéiert wéi et soll sinn. Dir musst (oder soll) manuell d'Klass vun all Retourwäert kontrolléieren wann Dir sapply benotzt an entspriechend Ausnamen eropgeet. Vapply léist dëst zimlech gutt mat sengem FUN.VALUE Argument. Dir musst explizit definéieren wat Ären Output (Charakteren, Zuel, ganz Zuel, Faktor oder wat och ëmmer) an Ausgangslängt ass.

Ech denken Dir kënnt Iech scho virstellen wéini Dir vapply sollte benotzen: Wann Dir een aneren erlaabt Är Funktiounen ze benotzen, da sollt Dir sapply zugonschte vun vapply falen :-).


beäntweren 2:

sapply wäert nëmme probéieren de lapply d'Resultat ze vereinfachen wa méiglech. Also:

  • Wann d'Resultat vu lapply eng Lëscht ass an där all Element en an der Längt ass, gëtt sapply e Vektor zréck. Wann d'Resultat eng Lëscht ass an där all Element e Vektor mat der selwechter Längt ass (> 1), gëtt eng Matrix zréck. Ech kann et net erausfannen, eng Lëscht ass zréck.

zB:

mat lapply:

> x  lapply (x, mëttler) $ a [1] 2.5 $ b [1] 0.06082667 $ c [1] 1.467083 $ d [1] 5.074749

mat sapply:

> sapply (x, mëttler) abcd 2.50000000 0.06082667 1.46708277 5.07474950

beäntweren 3:

Vläicht kann ech Iech e Beispill ginn:

Dëst schafft, awer déi zweet kann net:

# 1

l

sz <- max (sapply (l, Funktioun (x) Längt (x)))

# 2

l

sz <- max (lapply (l, Funktioun (x) Längt (x)))

Well d'Funktioun max () gëllt net fir eng Lëscht, awer nëmmen fir e Vector. A lapply gëtt eng Lëscht zréck a sapply gëtt e Vector.