Cieľom tohto tutoriálu je predstaviť kolekciu funkcií apply (). Funkcia apply () je najzákladnejšia zo všetkých kolekcií. Dozvieme sa tiež sapply (), lapply () a tapply (). Kolekciu s aplikáciami je možné považovať za náhradu slučky.
Kolekcia apply () je dodávaná s balíkom r essential, ak inštalujete R s Anacondou. Funkciu apply () je možné napájať mnohými funkciami na vykonávanie redundantnej aplikácie na kolekciu objektov (dátový rámec, zoznam, vektor atď.). Účelom apply () je predovšetkým vyhnúť sa explicitnému použitiu konštrukcií slučiek. Môžu byť použité pre vstupný zoznam, maticu alebo pole a použiť funkciu. Akákoľvek funkcia môže byť odovzdaná do apply ().
V tomto návode sa naučíte
- funkcia apply ()
- funkcia lapply ()
- funkcia sapply ()
- Vektor rezu
- funkcia tapply ()
funkcia apply ()
apply () berie dátový rámec alebo maticu ako vstup a dáva výstup vo vektore, zozname alebo v poli. Funkcia apply () sa primárne používa na zabránenie explicitnému použitiu konštrukcií slučiek. Je to najzákladnejšia zo všetkých kolekcií, ktoré sa dajú použiť nad maticu.
Táto funkcia má 3 argumenty:
apply(X, MARGIN, FUN)Here:-x: an array or matrix-MARGIN: take a value or range between 1 and 2 to define where to apply the function:-MARGIN=1`: the manipulation is performed on rows-MARGIN=2`: the manipulation is performed on columns-MARGIN=c(1,2)` the manipulation is performed on rows and columns-FUN: tells which function to apply. Built functions like mean, median, sum, min, max and even user-defined functions can be applied>
Najjednoduchším príkladom je súčet matíc vo všetkých stĺpcoch. Kód apply (m1, 2, sum) použije funkciu sum na maticu 5x6 a vráti súčet každého stĺpca prístupného v množine údajov.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1
Výkon:
Osvedčený postup: Pred vytlačením do konzoly uložte hodnoty.
funkcia lapply ()
Funkcia lapply () je užitočná na vykonávanie operácií s objektmi zoznamu a vracia objekt zoznamu s rovnakou dĺžkou pôvodnej množiny. lappy () vráti zoznam podobnej dĺžky ako objekt vstupného zoznamu, ktorého každý prvok je výsledkom použitia funkcie FUN na zodpovedajúci prvok zoznamu. lapply () berie ako vstup zoznam, vektor alebo dátový rámec a dáva výstup v zozname.
lapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
l v lapply () znamená zoznam. Rozdiel medzi lapply () a apply () spočíva medzi výstupným návratom. Výstupom parametra lapply () je zoznam. lapply () je možné použiť pre iné objekty, ako sú dátové rámce a zoznamy.
funkcia lapply () nevyžaduje MARGIN.
Veľmi jednoduchým príkladom môže byť zmena hodnoty reťazca matice na malé písmená pomocou funkcie tolower. Zostavili sme maticu s názvom slávnych filmov. Názov je vo formáte veľkých písmen.
movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")movies_lower <-lapply(movies, tolower)str(movies_lower)
Výkon:
## List of 4## $:chr"spyderman"## $:chr"batman"## $:chr"vertigo"## $:chr"chinatown"
Pomocou funkcie unlist () môžeme zoznam previesť na vektor.
movies_lower <-unlist(lapply(movies,tolower))str(movies_lower)
Výkon:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
funkcia sapply ()
Funkcia sapply () berie ako vstup zoznam, vektor alebo dátový rámec a poskytuje výstup vo vektore alebo matici. Je to užitočné pre operácie so zoznamovými objektmi a vracia zoznamový objekt rovnakej dĺžky pôvodnej množiny. Funkcia sapply () robí rovnakú prácu ako funkcia lapply (), ale vracia vektor.
sapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
Z dátového súboru automobilov môžeme merať minimálnu rýchlosť a brzdnú dráhu automobilov.
dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars
Výkon:
## $speed## [1] 4## $dist## [1] 2
smn_cars
Výkon:
## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars
Výkon:
## $speed## [1] 25## $dist## [1] 120
smxcars
Výkon:
## speed dist## 25 120
Môžeme použiť vstavanú funkciu používateľa do lapply () alebo sapply (). Vytvoríme funkciu s názvom avg na výpočet priemeru minima a maxima vektora.
avg <- function(x) {( min(x) + max(x) ) / 2}fcars <- sapply(dt, avg)fcars
Výkon
## speed dist## 14.5 61.0
Funkcia sapply () je vo výstupe vrátenom efektívnejšou ako lapply (), pretože sapply () ukladá hodnoty priamo do vektora. V nasledujúcom príklade uvidíme, že to tak nie je vždy.
V nasledujúcej tabuľke môžeme zhrnúť rozdiel medzi apply (), sapply () a `lapply ():
Funkcia |
Argumenty |
Cieľ |
Vstup |
Výkon |
---|---|---|---|---|
uplatniť |
platí (x, MARGIN, FUN) |
Aplikujte funkciu na riadky alebo stĺpce alebo na oba |
Dátový rámec alebo matica |
vektor, zoznam, pole |
lapply |
lapply (X, FUN) |
Použiť funkciu na všetky prvky vstupu |
Zoznam, vektor alebo dátový rámec |
zoznam |
šťavnatý |
sappy (X FUN) |
Použiť funkciu na všetky prvky vstupu |
Zoznam, vektor alebo dátový rámec |
vektor alebo matica |
Vektor rezu
Na rozdelenie dátového rámca môžeme použiť lapply () alebo sapply (). Vytvoríme funkciu below_average (), ktorá prevezme vektor číselných hodnôt a vráti vektor, ktorý obsahuje iba hodnoty, ktoré sú striktne nad priemerom. Porovnávame oba výsledky s identickou () funkciou.
below_ave <- function(x) {ave <- mean(x)return(x[x > ave])}dt_s<- sapply(dt, below_ave)dt_l<- lapply(dt, below_ave)identical(dt_s, dt_l)
Výkon:
## [1] TRUE
funkcia tapply ()
tapply () počíta mieru (priemer, medián, min., max. atď.) alebo funkciu pre každú premennú faktora vo vektore. Je to veľmi užitočná funkcia, ktorá vám umožní vytvoriť podmnožinu vektora a potom použiť niektoré funkcie na každú z podmnožiny.
tapply(X, INDEX, FUN = NULL)Arguments:-X: An object, usually a vector-INDEX: A list containing factor-FUN: Function applied to each element of x
Súčasťou práce dátového vedca alebo výskumného pracovníka je vypočítať súhrny premenných. Napríklad zmerajte priemerné alebo skupinové údaje na základe charakteristiky. Väčšina údajov je zoskupená podľa ID, mesta, krajín atď. Zhrnutie nad skupinou odhalí zaujímavejšie vzorce.
Aby sme pochopili, ako to funguje, použijeme množinu údajov o clone. Táto množina údajov je vo svete strojového učenia veľmi známa. Účelom tohto súboru údajov je predpovedať triedu každého z troch druhov kvetov: Sepal, Versicolor, Virginica. Dataset zhromažďuje informácie o každom druhu o ich dĺžke a šírke.
Ako predchádzajúcu prácu môžeme vypočítať medián dĺžky každého druhu. tapply () je rýchly spôsob vykonania tohto výpočtu.
data(iris)tapply(iris$Sepal.Width, iris$Species, median)
Výkon:
## setosa versicolor virginica## 3.4 2.8 3.0