R apply(), lapply(), sapply(), tapply() s primjerima
โก Pametni saลพetak
apply(), lapply(), sapply() i tapply() ฤine R obitelj apply funkcija, vektoriziranu alternativu eksplicitnim petljama koja primjenjuje odabranu funkciju na matrice, popise, vektore i grupirane podatke kako bi vratila saลพete rezultate.

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 zaustaviti seping udaljenosti automobila iz skupa podataka o automobilima.
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
