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.

  • ๐Ÿ”ฒ primijeni(): Izvrลกava funkciju nad retcima ili stupcima matrice.
  • ๐Ÿ“‹ preklapanje(): Primjenjuje funkciju na svaki element liste i vraฤ‡a listu.
  • ๐Ÿ“Š sapply(): Kao lapply(), ali pojednostavljuje izlaz u vektor.
  • ๐Ÿ—‚๏ธ tapply(): Primjenjuje funkciju na grupe definirane faktorom.
  • ๐Ÿค– AI pomoฤ‡: Umjetna inteligencija predlaลพe vektoriziranu primjenu koda preko sporih petlji.

primijeni, preklopi, sapply i tapply u R-u

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 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

Pitanja i odgovori

Funkcije Apply nisu uvijek brลพe od petlji for; njihova glavna prednost je koncizan i ฤitljiv kod. Vektorizirane operacije na cijelim vektorima obiฤno su brลพe od oboje.

vapply() radi kao sapply(), ali nameฤ‡e povratni tip radi sigurnosti, dok je mapply() multivarijantna verzija koja primjenjuje funkciju na nekoliko vektora odjednom.

Oba primjenjuju funkciju na svaki element liste ili vektora. lapply() uvijek vraฤ‡a listu, dok sapply() pojednostavljuje rezultat na vektor kada je to moguฤ‡e.

Da. AI asistenti mogu pretvoriti petlje u apply ili sapply pozive, predloลพiti pravu funkciju za vaลกe podatke i objasniti argumente poput MARGIN i FUN.

AI alati generiraju R kod, preporuฤuju vektorizirane funkcije primjene, otkrivaju pogreลกke i saลพimaju rezultate, pomaลพuping analitiฤari brลพe obraฤ‘uju okvire podataka s manje greลกaka.

Saลพmite ovu objavu uz: