Kuo skiriasi rausvai raudonasis R? Kada turėtumėte naudoti vieną, o ne kitą? Premija: kada turėtumėte naudoti makštį?


Atsakymas 1:

Aš manau, kad jūs jau žinote, ką veikia * funkcija :-).

Pagrindinis skirtumas tarp lapply ir sapply yra tas, kad sapply stengsis kiek įmanoma supaprastinti lapply išvestį. Jei jūsų funkcija grąžins vieną kiekvieno sąrašo elemento vertę, programa „Sapply“ grąžins vektorių su tomis vertėmis, pvz., Naudinga, kai norite patikrinti sąrašo elementų ilgį.

Kita galimybė yra tai, kad jūsų funkcija grąžina to paties dydžio vektorius kiekvienam sąrašo elementui, pvz., Diapazono ir kvantilės funkcijas. Tokiu atveju safyras grąžins matricą, kurios eilučių skaičius bus lygus jūsų vektorių ilgiui, ir stulpelių skaičių, lygų sąrašo ilgiui.

Jei tapply negali supaprastinti išvesties, ji elgsis lygiai taip pat, kaip ir lapply.

Dabar Sapply neaiškus grįžtamųjų verčių (kartais sąrašo, kartais matricos ar vektoriaus) paketų kūrimas su juo yra šiek tiek sudėtingesnis, nei turėtų būti. Jūs turite (arba bent jau turėtumėte) rankiniu būdu tikrinti kiekvienos grąžinimo vertės klasę, kai naudojate safyrą, ir įmeskite tinkamas išimtis. „Vapply“ gana gražiai tai išsprendžia pateikdamas argumentą FUN.VALUE. Jūs turite aiškiai apibrėžti, kas yra jūsų išvestis (simbolis, skaitinis, sveikasis skaičius, koeficientas ar kas kita) ir išvesties ilgį.

Manau, jūs jau galite įsivaizduoti, kada naudoti vapply: kai jūs leidžiate kam nors kitam naudoti jūsų funkcijas, turėtumėte griovį pjauti vapply naudai :-).


Atsakymas 2:

„Sapply“ tiesiog bandys supaprastinti „lapply“ rezultatą, jei įmanoma. Taigi:

  • Jei lapply rezultatas yra sąrašas, kuriame kiekvienas elementas yra vieno ilgio, tada sapply grąžins vektorių.Jei rezultatas yra sąrašas, kuriame kiekvienas elementas yra to paties ilgio vektorius (> 1), grąžinama matrica.Jei ji negali išsiaiškinti dalykų, sąrašas grąžinamas.

pvz .:

su lapply:

> x <- sąrašas (a = 1: 4, b = rnorm (10), c = rnorm (20, 1), d = rnorm (100, 5))> lapply (x, vidurkis) $ a [1] 2,5 $ b [1] 0,06082667 $ c [1] 1,467083 USD d [1] 5,074749

su sapply:

> sapply (x, vidurkis) abcd 2.50000000 0.06082667 1.46708277 5.07474950

Atsakymas 3:

Aš galiu pateikti jums pavyzdį:

Tai veiks, bet antrasis negali:

# 1

l <- sąrašas („a“, „b“, c („x“, „y“), c („1“, „3“, „4“))

sz <- max (sapply (l, funkcijos (x) ilgis (x)))

# 2

l <- sąrašas („a“, „b“, c („x“, „y“), c („1“, „3“, „4“))

sz <- max (kartotinis (l, funkcijos (x) ilgis (x)))

Kadangi funkcija max () taikoma ne sąrašui, o tik vektoriui. Ir „lapply“ pateikia sąrašą, o „sapply“ - vektorių.