apply(), lapply(), sapply(), tapply() Funcția în R cu exemple

Acest tutorial are ca scop introducerea colecției de funcții apply(). Funcția apply() este cea mai elementară dintre toate colecțiile. Vom învăța și sapply(), lapply() și tapply(). Colecția de aplicații poate fi văzută ca un substitut al buclei.

Colecția apply() este inclusă în pachet r esential pachet dacă tu instalați R cu Anaconda. Funcția de aplicare în R poate fi alimentată cu multe funcții pentru a efectua aplicații redundante pe o colecție de obiecte (cadru de date, listă, vector etc.). Scopul aplicației() este în primul rând evitarea utilizărilor explicite ale constructelor bucle. Ele pot fi utilizate pentru o listă de intrare, o matrice sau o matrice și pot aplica o funcție. Orice funcție poate fi transmisă în apply().

funcția apply().

aplica() ia cadru de date sau matrice ca intrare și oferă ieșire în vector, listă sau matrice. aplica funcția în R este folosit în primul rând pentru a evita utilizările explicite ale constructelor bucle. Este cea mai de bază dintre toate colecțiile care pot fi folosite peste o matrice.

Această funcție are 3 argumente:

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>

Cel mai simplu exemplu este să însumăm o matrice peste toate coloanele. Codul apply(m1, 2, sum) va aplica funcția sum matricei 5×6 și va returna suma fiecărei coloane accesibile în setul de date.

m1 <- matrix(C<-(1:10),nrow=5, ncol=6)
m1
a_m1 <- apply(m1, 2, sum)
a_m1

ieșire:

Exemplu de funcție Apply() în R
exemplu de funcție apply() în R

Cea mai bună practică: stocați valorile înainte de a le imprima pe consolă.

funcția lapply().

laply() funcția este utilă pentru efectuarea de operații pe obiecte listă și returnează un obiect listă de aceeași lungime a setului original. lappy() returnează o listă de lungime similară ca obiectul listă de intrare, fiecare element al căruia este rezultatul aplicării FUN la elementul corespondent al listei. Lapply în R ia lista, vectorul sau cadru de date ca intrare și oferă rezultate în listă.

lapply(X, FUN)
Arguments:
-X: A vector or an object
-FUN: Function applied to each element of x	

l în lapply() înseamnă listă. Diferența dintre lapply() și apply() constă între randamentul de ieșire. Ieșirea lui lapply() este o listă. lapply() poate fi folosit pentru alte obiecte, cum ar fi cadre de date și liste.

Funcția lapply() nu are nevoie de MARGINĂ.

Un exemplu foarte ușor poate fi schimbarea valorii șirului de caractere a unei matrice în litere mici cu funcția de jos. Construim o matrice cu numele filmelor celebre. Numele este în format majuscule.

movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")
movies_lower <-lapply(movies, tolower)
str(movies_lower)

ieșire:

## List of 4
## $:chr"spyderman"
## $:chr"batman"
## $:chr"vertigo"
## $:chr"chinatown"

Putem folosi unlist() pentru a converti lista într-un vector.

movies_lower <-unlist(lapply(movies,tolower))
str(movies_lower)

ieșire:

##  chr [1:4] "spyderman" "batman" "vertigo" "chinatown"

funcția sapply().

sapply() funcția ia listă, vector sau cadru de date ca intrare și oferă ieșire în vector sau matrice. Este util pentru operațiuni pe obiecte listă și returnează un obiect listă de aceeași lungime a setului original. Funcția Sapply din R face aceeași treabă ca și funcția lapply(), dar returnează un vector.

sapply(X, FUN)
Arguments:
-X: A vector or an object
-FUN: Function applied to each element of x

Putem măsura viteza minimă și distanțele de oprire ale mașinilor din setul de date auto.

dt <- cars
lmn_cars <- lapply(dt, min)
smn_cars <- sapply(dt, min)
lmn_cars

ieșire:

## $speed
## [1] 4
## $dist
## [1] 2
smn_cars

ieșire:

## speed  dist 
##     4     2
lmxcars <- lapply(dt, max)
smxcars <- sapply(dt, max)
lmxcars

ieșire:

## $speed
## [1] 25
## $dist
## [1] 120
smxcars

ieșire:

## speed  dist 
##    25   120

Putem folosi o funcție încorporată de utilizator în lapply() sau sapply(). Creăm o funcție numită avg pentru a calcula media minimului și maximului vectorului.

avg <- function(x) {  
  ( min(x) + max(x) ) / 2}
fcars <- sapply(dt, avg)
fcars

producție

## speed  dist
##  14.5  61.0

Sapply în R este mai eficient decât lapply() în rezultatul returnat deoarece sapply() stochează valorile direct într-un vector. În exemplul următor, vom vedea că nu este întotdeauna cazul.

Putem rezuma diferența dintre apply(), sapply() și `lapply() în următorul tabel:

Funcţie Argumente Obiectiv Intrare producție
aplica aplica (x, MARJA, DISTRACȚIE) Aplicați o funcție la rânduri sau coloane sau ambele Cadrul de date sau matricea vector, listă, matrice
laply laply (X, distracție) Aplicați o funcție tuturor elementelor de intrare Listă, vector sau cadru de date listă
sapply sapply (X, DISTRACȚIE) Aplicați o funcție tuturor elementelor de intrare Listă, vector sau cadru de date vector sau matrice

Vector felie

Putem folosi interschimbabil lapply() sau sapply() pentru a tăia un cadru de date. Creăm o funcție, below_average(), care preia un vector de valori numerice și returnează un vector care conține doar valorile care sunt strict peste medie. Comparăm ambele rezultate cu funcția 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)

ieșire:

## [1] TRUE

funcția taply().

taply() calculează o măsură (media, mediană, min, max etc..) sau o funcție pentru fiecare variabilă factor dintr-un vector. Este o funcție foarte utilă care vă permite să creați un subset al unui vector și apoi să aplicați unele funcții fiecărui subset.

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

O parte a sarcinii unui om de știință de date sau a cercetătorilor este de a calcula rezumate ale variabilelor. De exemplu, măsurați media sau datele de grup pe baza unei caracteristici. Majoritatea datelor sunt grupate după ID, oraș, țări și așa mai departe. Rezumarea grupului dezvăluie modele mai interesante.

Pentru a înțelege cum funcționează, să folosim setul de date iris. Acest set de date este foarte faimos în lumea învățării automate. Scopul acestui set de date este de a prezice clasa fiecăreia dintre cele trei specii de flori: Sepal, Versicolor, Virginica. Setul de date colectează informații pentru fiecare specie despre lungimea și lățimea lor.

Ca o lucrare anterioară, putem calcula mediana lungimii pentru fiecare specie. Taply în R este o modalitate rapidă de a efectua acest calcul.

data(iris)
tapply(iris$Sepal.Width, iris$Species, median)

ieșire:

##     setosa versicolor  virginica 
##        3.4        2.8        3.0

Citeste mai mult…