R apply(), lapply(), sapply(), tapply() cu exemple
โก Rezumat inteligent
apply(), lapply(), sapply() ศi tapply() formeazฤ familia de funcศii R apply, o alternativฤ vectorizatฤ la buclele explicite care aplicฤ o funcศie aleasฤ peste matrici, liste, vectori ศi date grupate pentru a returna rezultate concise.

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:

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 ne putem opriping distanศele maศinilor faศฤ de setul de date privind maศinile.
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
