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

Cuprins:

Anonim

Acest tutorial vizează introducerea colecției de funcții apply (). Funcția apply () este cea mai de bază dintre toate colecțiile. De asemenea, vom învăța sapply (), lapply () și tapply (). Colecția de aplicații poate fi văzută ca un substitut pentru buclă.

Colecția apply () este inclusă în pachetul esențial r dacă instalați R cu Anaconda. Funcția apply () poate fi alimentată cu mai multe funcții pentru a efectua aplicații redundante pe o colecție de obiecte (cadru de date, listă, vector etc.). Scopul apply () este în primul rând de a evita utilizările explicite ale constructelor de buclă. Ele pot fi utilizate pentru o listă de intrare, matrice sau matrice și pot aplica o funcție. Orice funcție poate fi trecută în apply ().

În acest tutorial, veți învăța

  • funcția apply ()
  • funcția lapply ()
  • funcția sapply ()
  • Vector felie
  • funcția tapply ()

funcția apply ()

apply () ia cadru de date sau matrice ca intrare și dă ieșire în vector, listă sau matrice. apply () Funcția este utilizată în principal pentru a evita utilizările explicite ale constructelor de buclă. 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 se aplică (m1, 2, sumă) va aplica funcția sumă matricei 5x6 și va returna suma fiecărei coloane accesibile din setul de date.

m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_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 ()

funcția lapply () este utilă pentru efectuarea operațiunilor pe obiecte listă și returnează un obiect listă cu aceeași lungime a setului original. lappy () returnează o listă cu lungimea similară ca obiectul listei de intrare, fiecare element al cărui rezultat este aplicarea FUN elementului corespunzător din listă. lapply () ia listă, vector sau cadru de date ca intrare și dă ieșire î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 () se află între randamentul de ieșire. Ieșirea lui lapply () este o listă. lapply () poate fi folosit pentru alte obiecte precum cadre de date și liste.

funcția lapply () nu are nevoie de MARGIN.

Un exemplu foarte ușor poate fi schimbarea valorii șirului unei matrice cu litere mici cu funcția tolower. Construim o matrice cu numele celebrelor filme. 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 ()

funcția sapply () ia listă, vector sau cadru de date ca intrare și dă ieșire în vector sau matrice. Este util pentru operații pe obiecte de listă și returnează un obiect de listă cu aceeași lungime a setului original. funcția sapply () face aceeași treabă cu 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 față de setul de mașini.

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

Ieșire

## speed dist## 14.5 61.0

funcția sapply () este mai eficientă decât lapply () în ieșirea returnată deoarece sapply () stochează direct valorile într-un vector. În exemplul următor, vom vedea că acest lucru nu este întotdeauna cazul.

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

Funcţie

Argumente

Obiectiv

Intrare

Ieșire

aplica

aplica (x, MARGIN, FUN)

Aplicați o funcție rândurilor sau coloanelor sau ambelor

Cadru de date sau matrice

vector, listă, matrice

lapply

lapply (X, FUN)

Aplicați o funcție tuturor elementelor intrării

Listă, vector sau cadru de date

listă

sapply

sappy (X FUN)

Aplicați o funcție tuturor elementelor intrării

Listă, vector sau cadru de date

vector sau matrice

Vector felie

Putem folosi lapply () sau sapply () interschimbabile pentru a tăia un cadru de date. Creăm o funcție, below_average (), care ia 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 identică ().

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 tapply ()

tapply () calculează o măsură (medie, mediană, minimă, maximă etc.) sau o funcție pentru fiecare variabilă de 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 cercetător de date sau a cercetătorilor este de a calcula rezumate ale variabilelor. De exemplu, măsurați datele medii sau de grup pe baza unei caracteristici. Majoritatea datelor sunt grupate după ID, oraș, țări etc. Rezumarea pe grup dezvăluie modele mai interesante.

Pentru a înțelege cum funcționează, să folosim setul de date iris. Acest set de date este foarte renumit î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 lucrare anterioară, putem calcula mediana lungimii pentru fiecare specie. tapply () 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