apply(), lapply(), sapply(), tapply() Funkcija u R s primjerima
Ovaj vodič ima za cilj uvesti zbirku funkcija apply(). Funkcija apply() je najosnovnija od svih kolekcija. Također ćemo naučiti sapply(), lapply() i tapply(). Zbirka primjene može se promatrati kao zamjena za petlju.
Zbirka apply() dolazi u paketu s r bitno paket ako ti instalirajte R s Anacondom. Funkcija primjene u R može se nadopuniti mnogim funkcijama za izvođenje redundantne primjene na zbirci objekata (podatkovni okvir, popis, vektor itd.). Svrha apply() je prvenstveno izbjegavanje eksplicitne upotrebe konstrukcija petlje. Mogu se koristiti za ulaznu listu, matricu ili niz i primijeniti funkciju. Bilo koja funkcija može se proslijediti u apply().
apply() funkcija
primijeniti () uzima podatkovni okvir ili matricu kao ulaz i daje izlaz u vektoru, popisu ili polju. primijeniti funkcija u R prvenstveno se koristi za izbjegavanje eksplicitne upotrebe konstrukcija petlje. To je najosnovnija od svih kolekcija koja se može koristiti preko matrice.
Ova funkcija uzima 3 argumenta:
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>
Najjednostavniji primjer je zbrajanje matrice po svim stupcima. Kod apply(m1, 2, sum) primijenit će funkciju zbroja na matricu 5×6 i vratiti zbroj svakog stupca dostupnog u skupu podataka.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6) m1 a_m1 <- apply(m1, 2, sum) a_m1
Izlaz:
Najbolja praksa: pohranite vrijednosti prije ispisa na konzolu.
lapply() funkcija
lapply() funkcija je korisna za izvođenje operacija na objektima popisa i vraća objekt popisa iste duljine izvornog skupa. lappy() vraća popis slične duljine kao ulazni objekt popisa, čiji je svaki element rezultat primjene FUN-a na odgovarajući element popisa. Lapply u R uzima popis, vektor ili podatkovni okvir kao ulaz i daje izlaz u popisu.
lapply(X, FUN) Arguments: -X: A vector or an object -FUN: Function applied to each element of x
l u lapply() označava popis. Razlika između lapply() i apply() leži u izlaznom povratu. Izlaz funkcije lapply() je popis. lapply() se može koristiti za druge objekte poput podatkovnih okvira i popisa.
funkcija lapply() ne treba MARGIN.
Vrlo jednostavan primjer može biti promjena vrijednosti niza matrice u mala slova pomoću funkcije tolower. Konstruiramo matricu s imenima poznatih filmova. Naziv je napisan velikim slovima.
movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN") movies_lower <-lapply(movies, tolower) str(movies_lower)
Izlaz:
## List of 4 ## $:chr"spyderman" ## $:chr"batman" ## $:chr"vertigo" ## $:chr"chinatown"
Možemo koristiti unlist() za pretvaranje liste u vektor.
movies_lower <-unlist(lapply(movies,tolower)) str(movies_lower)
Izlaz:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
funkcija sapply().
sapply() funkcija uzima popis, vektor ili okvir podataka kao ulaz i daje izlaz u vektoru ili matrica. Koristan je za operacije na objektima popisa i vraća objekt popisa iste duljine izvornog skupa. Funkcija Sapply u R-u radi isti posao kao funkcija lapply(), ali vraća vektor.
sapply(X, FUN) Arguments: -X: A vector or an object -FUN: Function applied to each element of x
Možemo izmjeriti minimalnu brzinu i zaustavni put automobila iz skupa podataka automobila.
dt <- cars lmn_cars <- lapply(dt, min) smn_cars <- sapply(dt, min) lmn_cars
Izlaz:
## $speed ## [1] 4 ## $dist ## [1] 2
smn_cars
Izlaz:
## speed dist ## 4 2
lmxcars <- lapply(dt, max) smxcars <- sapply(dt, max) lmxcars
Izlaz:
## $speed ## [1] 25 ## $dist ## [1] 120
smxcars
Izlaz:
## speed dist ## 25 120
Možemo koristiti korisničku ugrađenu funkciju u lapply() ili sapply(). Kreiramo funkciju pod nazivom avg za izračunavanje prosjeka minimuma i maksimuma vektora.
avg <- function(x) { ( min(x) + max(x) ) / 2} fcars <- sapply(dt, avg) fcars
Izlaz
## speed dist ## 14.5 61.0
Sapply u R je učinkovitiji od lapply() u vraćenom izlazu jer sapply() pohranjuje vrijednosti izravno u vektor. U sljedećem primjeru vidjet ćemo da to nije uvijek slučaj.
Možemo sažeti razliku između apply(), sapply() i `lapply() u sljedećoj tablici:
funkcija | argumenti | Cilj | Ulazni | Izlaz |
---|---|---|---|---|
primijeniti | primijeni(x, MARGINA, ZABAVA) | Primijenite funkciju na retke ili stupce ili oboje | Podatkovni okvir ili matrica | vektor, lista, niz |
lapply | lapply(X, ZABAVNO) | Primijeni funkciju na sve elemente unosa | Popis, vektor ili podatkovni okvir | popis |
sapply | sapply(X, ZABAVNO) | Primijeni funkciju na sve elemente unosa | Popis, vektor ili podatkovni okvir | vektor ili matrica |
Slice vektor
Možemo koristiti lapply() ili sapply() naizmjenično za rezanje okvira podataka. Stvaramo funkciju, below_average(), koja uzima vektor numeričkih vrijednosti i vraća vektor koji sadrži samo vrijednosti koje su strogo iznad prosjeka. Oba rezultata uspoređujemo s funkcijom identical().
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)
Izlaz:
## [1] TRUE
funkcija tapply().
dodirnuti () izračunava mjeru (srednja vrijednost, medijan, min, maksimum, itd..) ili funkciju za svaku faktorsku varijablu u vektoru. To je vrlo korisna funkcija koja vam omogućuje stvaranje podskupa vektora i zatim primjenu nekih funkcija na svaki od podskupa.
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
Dio posla znanstvenika ili istraživača podataka je izračunavanje sažetaka varijabli. Na primjer, izmjerite prosjek ili grupne podatke na temelju karakteristike. Većina podataka je grupirana prema ID-u, gradu, državi i tako dalje. Sažimanje preko grupe otkriva zanimljivije obrasce.
Da bismo razumjeli kako to radi, upotrijebimo skup podataka šarenice. Ovaj skup podataka vrlo je poznat u svijetu strojnog učenja. Svrha ovog skupa podataka je predvidjeti klasu svake od tri cvjetne vrste: Sepal, Versicolor, Virginica. Skup podataka prikuplja informacije za svaku vrstu o njihovoj duljini i širini.
Kao prethodni posao, možemo izračunati medijan duljine za svaku vrstu. Tapply u R je brz način za izvođenje ovog izračuna.
data(iris) tapply(iris$Sepal.Width, iris$Species, median)
Izlaz:
## setosa versicolor virginica ## 3.4 2.8 3.0