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:

Primjer funkcije Apply() u R
primjer funkcije apply() u R

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