Cilj ovog vodiča je predstaviti zbirku funkcija apply (). Funkcija apply () najosnovnija je od svih zbirki. Također ćemo naučiti sapply (), lapply () i tapply (). Zbirka prijava može se promatrati kao zamjena za petlju.
Kolekcija apply () u paketu je s r neophodnim paketom ako R instalirate s Anacondom. Funkcija apply () može se hraniti s mnogim funkcijama za izvođenje suvišnih aplikacija na kolekciji predmeta (okvir podataka, popis, vektor itd.). Svrha apply () prvenstveno je izbjegavanje eksplicitne upotrebe konstrukcija petlje. Mogu se koristiti za popis unosa, matricu ili polje i primijeniti funkciju. Bilo koja funkcija može se proslijediti u apply ().
U ovom ćete tutorijalu naučiti
- primijeniti funkciju ()
- funkcija lapply ()
- funkcija sapply ()
- Vektor kriški
- funkcija tapply ()
primijeniti funkciju ()
apply () uzima okvir podataka ili matricu kao ulaz i daje izlaz u vektoru, popisu ili nizu. Primjena () Funkcija se prvenstveno koristi za izbjegavanje eksplicitne upotrebe konstrukcija petlje. Najosnovnija je 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. Primijenjeni kod (m1, 2, zbroj) primijenit će funkciju zbroja na matricu 5x6 i vratiti zbroj svakog stupca koji je dostupan u skupu podataka.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1
Izlaz:
Najbolja praksa: pohranite vrijednosti prije ispisa na konzolu.
funkcija lapply ()
funkcija lapply () korisna je za izvođenje operacija na objektima popisa i vraća objekt popisa iste duljine izvornog skupa. lappy () vraća popis slične duljine kao objekt popisa unosa, čiji je svaki element rezultat primjene FUN na odgovarajući element popisa. lapply () uzima popis, vektor ili okvir podataka kao ulaz i daje izlaz na 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. Rezultat lapply () je popis. lapply () se može koristiti za druge objekte poput okvira podataka i popisa.
funkcija lapply () ne treba MARGIN.
Vrlo jednostavan primjer može biti promjena vrijednosti niza matrice u malo slovo s funkcijom tolower. Konstruiramo matricu s imenom poznatih filmova. Ime je napisano 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 upotrijebiti unlist () za pretvaranje popisa u vektor.
movies_lower <-unlist(lapply(movies,tolower))str(movies_lower)
Izlaz:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
funkcija sapply ()
funkcija sapply () uzima popis, vektor ili okvir podataka kao ulaz i daje izlaz u vektoru ili matrici. Korisno je za operacije s objektima popisa i vraća objekt popisa iste duljine izvornog skupa. funkcija sapply () 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
Iz skupa podataka automobila možemo izmjeriti minimalnu brzinu i zaustavnu udaljenost automobila.
dt <- carslmn_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
Korisničku ugrađenu funkciju možemo koristiti u lapply () ili sapply (). Stvaramo funkciju s imenom 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
funkcija sapply () je učinkovitija od lapply () u vraćenom izlazu jer sapply () pohranjuje vrijednosti usmjerene u vektor. U sljedećem ćemo primjeru vidjeti da to nije uvijek slučaj.
Razliku između apply (), sapply () i `lapply () možemo sažeti u sljedećoj tablici:
Funkcija |
Argumenti |
Cilj |
Ulazni |
Izlaz |
---|---|---|---|---|
primijeniti |
primijeniti (x, MARGIN, FUN) |
Primijenite funkciju na retke ili stupce ili oboje |
Okvir podataka ili matrica |
vektor, popis, niz |
labavo |
labavo (X, ZABAVNO) |
Primijenite funkciju na sve elemente unosa |
Popis, vektor ili okvir podataka |
popis |
sapply |
sappy (X ZABAVNO) |
Primijenite funkciju na sve elemente unosa |
Popis, vektor ili okvir podataka |
vektor ili matrica |
Vektor kriški
Za rezanje okvira podataka možemo koristiti zamjenjivi lapply () ili sapply (). Stvaramo funkciju, ispod_prosjeka (), koja uzima vektor numeričkih vrijednosti i vraća vektor koji sadrži samo vrijednosti koje su strogo iznad prosjeka. Uspoređujemo oba rezultata s identičnom () funkcijom.
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 ()
tapply () izračunava mjeru (srednju vrijednost, medijan, min, max itd.) ili funkciju za svaku varijablu faktora u vektoru. To je vrlo korisna funkcija koja vam omogućuje stvaranje podskupa vektora, a zatim primjenu nekih funkcija na svaki podskup.
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 skupne podatke na temelju karakteristike. Većina podataka grupirana je prema ID-u, gradu, državi itd. Sažimanje po grupi otkriva zanimljivije obrasce.
Da bismo razumjeli kako to funkcionira, upotrijebimo skup podataka irisa. Ovaj skup podataka vrlo je poznat u svijetu strojnog učenja. Svrha ovog skupa podataka je predvidjeti razred svake od tri vrste cvijeća: Sepal, Versicolor, Virginica. Skup podataka prikuplja podatke o svakoj duljini i širini za svaku vrstu.
Kao prethodni rad, možemo izračunati medijan dužine za svaku vrstu. tapply () je brz način izvođenja ovog izračuna.
data(iris)tapply(iris$Sepal.Width, iris$Species, median)
Izlaz:
## setosa versicolor virginica## 3.4 2.8 3.0