Apply (), lapply (), sapply (), tapply () Funkcija v R s primeri

Kazalo:

Anonim

Cilj te vadnice je predstaviti zbirko funkcij apply (). Funkcija apply () je najosnovnejša od vseh zbirk. Naučili se bomo tudi sapply (), lapply () in tapply (). Zbirko prijav lahko obravnavamo kot nadomestek zanke.

Zbirka apply () je v paketu z r bistvenim paketom, če R namestite z Anacondo. Funkcija apply () se lahko podaja s številnimi funkcijami za izvajanje odvečne aplikacije na zbirki predmetov (podatkovni okvir, seznam, vektor itd.). Namen apply () je predvsem izogibanje eksplicitni uporabi konstrukcij zanke. Uporabljajo se lahko za vnosni seznam, matriko ali matriko in uporabljajo funkcijo. Katero koli funkcijo lahko prenesete v apply ().

V tej vadnici boste izvedeli

  • Uporabi funkcijo ()
  • funkcija lapply ()
  • funkcija sapply ()
  • Vektor rezine
  • funkcija tapply ()

Uporabi funkcijo ()

apply () vzame podatkovni okvir ali matriko kot vhod in poda izhod v vektorju, seznamu ali matriki. Funkcija apply () se uporablja predvsem za izogibanje eksplicitni uporabi konstrukcij zanke. Je najosnovnejša od vseh kolekcij, ki se lahko uporabljajo prek matrice.

Ta funkcija ima 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>

Najenostavnejši primer je seštevanje matrice po vseh stolpcih. Koda uveljavi (m1, 2, vsota) bo uporabila funkcijo vsote za matrico 5x6 in vrnila vsoto vsakega stolpca, ki je dostopen v naboru podatkov.

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

Izhod:

Najboljša praksa: shranite vrednosti, preden jih natisnete na konzolo.

funkcija lapply ()

funkcija lapply () je uporabna za izvajanje operacij s predmeti seznama in vrne predmet seznama enake dolžine prvotnega niza. lappy () vrne seznam podobne dolžine kot objekt seznama vhodov, katerega vsak element je rezultat uporabe FUN za ustrezen element seznama. lapply () vzame seznam, vektor ali podatkovni okvir kot vhod in poda izhod na seznam.

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

l in lapply () pomeni seznam. Razlika med lapply () in apply () je med izhodno donosnostjo. Rezultat lapply () je seznam. lapply () se lahko uporablja za druge predmete, kot so podatkovni okviri in seznami.

funkcija lapply () ne potrebuje MARGIN.

Zelo enostaven primer je lahko sprememba vrednosti niza matrike v male črke s funkcijo tolower. Sestavimo matrico z imenom znanih filmov. Ime je napisano z velikimi črkami.

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

Izhod:

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

Za pretvorbo seznama v vektor lahko uporabimo unlist ().

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

Izhod:

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

funkcija sapply ()

funkcija sapply () za vhod vzame seznam, vektor ali podatkovni okvir in daje izhod v vektorju ali matriki. Uporaben je za operacije s predmeti seznama in vrne predmet seznama enake dolžine prvotnega niza. funkcija sapply () opravlja isto delo kot funkcija lapply (), vendar vrne vektor.

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

Iz nabora podatkov o avtomobilih lahko izmerimo najmanjšo hitrost in zavorno razdaljo avtomobilov.

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

Izhod:

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

Izhod:

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

Izhod:

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

Izhod:

## speed dist## 25 120

Uporabniško vgrajeno funkcijo lahko uporabimo v lapply () ali sapply (). Ustvarimo funkcijo z imenom avg za izračun povprečja najmanjšega in največjega vektorja.

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

Izhod

## speed dist## 14.5 61.0

Funkcija sapply () je v vrnjenem izhodu učinkovitejša od lapply (), ker sapply () shrani vrednosti, usmerjene v vektor. V naslednjem primeru bomo videli, da ni vedno tako.

Razliko med apply (), sapply () in `lapply () lahko povzamemo v naslednji tabeli:

Funkcija

Argumenti

Cilj

Vhod

Izhod

prijaviti

uporabi (x, MARGIN, FUN)

Uporabi funkcijo za vrstice ali stolpce ali oboje

Podatkovni okvir ali matrika

vektor, seznam, matrika

lapply

lapply (X, ZABAVNO)

Uporabi funkcijo za vse elemente vnosa

Seznam, vektor ali podatkovni okvir

seznam

sapply

sappy (X ZABAVNO)

Uporabi funkcijo za vse elemente vnosa

Seznam, vektor ali podatkovni okvir

vektor ali matrika

Vektor rezine

Za rezanje podatkovnega okvira lahko uporabimo zamenljivi lapply () ali sapply (). Ustvarimo funkcijo, under_average (), ki vzame vektor numeričnih vrednosti in vrne vektor, ki vsebuje samo vrednosti, ki so strogo nad povprečjem. Oba rezultata primerjamo z identično () funkcijo.

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)

Izhod:

## [1] TRUE

funkcija tapply ()

tapply () izračuna mero (povprečje, mediano, min, max itd.) ali funkcijo za vsako spremenljivko faktorja v vektorju. To je zelo uporabna funkcija, ki vam omogoča, da ustvarite podmnožico vektorja in nato uporabite nekatere funkcije za vsako podmnožico.

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

Del naloge podatkovnega znanstvenika ali raziskovalca je izračunavanje povzetkov spremenljivk. Na primer, izmerite povprečje ali skupinske podatke na podlagi značilnosti. Večina podatkov je razvrščenih po osebnih dokumentih, mestih, državah itd. Povzemanje po skupinah razkrije bolj zanimive vzorce.

Da bi razumeli, kako deluje, uporabimo nabor podatkov irisa. Ta nabor podatkov je zelo znan v svetu strojnega učenja. Namen tega nabora podatkov je predvideti razred vsake od treh vrst cvetov: Sepal, Versicolor, Virginica. Nabor podatkov za vsako vrsto zbira informacije o njihovi dolžini in širini.

Kot predhodno delo lahko izračunamo mediano dolžine za vsako vrsto. tapply () je hiter način za izvedbo tega izračuna.

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

Izhod:

## setosa versicolor virginica## 3.4 2.8 3.0