R apply(), lapply(), sapply(), tapply() esimerkkeineen

Tämän opetusohjelman tarkoituksena on esitellä apply()-funktiokokoelma. Apply()-funktio on yksinkertaisin kaikista kokoelmasta. Opimme myös sapply(), lapply() ja tapply(). Sovelluskokoelmaa voidaan pitää silmukan korvikkeena.

Application()-kokoelma on mukana r välttämätön paketti jos sinä asenna R Anacondan kanssa. Apply in R -toimintoon voidaan syöttää monia toimintoja redundanttien sovellusten suorittamiseksi objektikokoelmalle (tietokehys, luettelo, vektori jne.). Sovelluksen():n tarkoitus on ensisijaisesti välttää silmukkarakenteiden eksplisiittistä käyttöä. Niitä voidaan käyttää syöteluettelona, ​​matriisina tai taulukona ja soveltaa funktiota. Mikä tahansa funktio voidaan siirtää toimintoon apply().

apply()-funktio

Käytä() ottaa tietokehyksen tai matriisin syötteenä ja antaa ulostulon vektorina, listana tai matriisina. Käytä toiminto R:ssä käytetään ensisijaisesti välttämään silmukkarakenteiden eksplisiittistä käyttöä. Se on yksinkertaisin kaikista kokoelmista, jota voidaan käyttää matriisin yli.

Tämä funktio ottaa 3 argumenttia:

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>

Yksinkertaisin esimerkki on laskea yhteen matriisi kaikista sarakkeista. Koodi apply(m1, 2, sum) käyttää summafunktiota matriisissa 5×6 ja palauttaa jokaisen tietojoukossa käytettävissä olevan sarakkeen summan.

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

lähtö:

Apply()-funktioesimerkki R:ssä
example()-funktion esimerkki R:ssä

Paras käytäntö: Tallenna arvot ennen kuin tulostat ne konsoliin.

lapply()-funktio

lapply() -toiminto on hyödyllinen suoritettaessa toimintoja listaobjekteille ja palauttaa listaobjektin, joka on samanpituinen kuin alkuperäinen joukko. lappy() palauttaa samanpituisen listan kuin syöteluetteloobjekti, jonka jokainen elementti on seurausta FUN:n soveltamisesta vastaavaan listan elementtiin. Lapply in R ottaa syötteenä listan, vektorin tai datakehyksen ja antaa tulosteen listassa.

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

l sanoissa lapply() tarkoittaa listaa. Ero lapply():n ja apply():n välillä on lähtöpalautuksen välillä. Lapply():n tulos on lista. lapply() voidaan käyttää muille objekteille, kuten tietokehyksille ja listoille.

lapply()-funktio ei tarvitse MARGIN.

Hyvin helppo esimerkki voi olla matriisin merkkijonon arvon muuttaminen pieneksi tolower-funktiolla. Rakennamme matriisin kuuluisien elokuvien nimistä. Nimi on isoilla kirjaimilla.

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

lähtö:

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

Voimme käyttää unlist()-komentoa muuntaaksesi listan vektoriksi.

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

lähtö:

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

sapply()-funktio

apply() toiminto ottaa listan, vektorin tai datakehyksen syötteenä ja antaa ulostulon vektorissa tai matriisi. Se on hyödyllinen listaobjektien operaatioissa ja palauttaa listaobjektin, joka on samanpituinen kuin alkuperäinen joukko. R:n sapply-funktio tekee saman työn kuin lapply()-funktio, mutta palauttaa vektorin.

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

Voimme mitata autojen miniminopeuden ja pysähdysmatkoja autotietojoukosta.

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

lähtö:

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

lähtö:

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

lähtö:

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

lähtö:

## speed  dist 
##    25   120

Voimme käyttää käyttäjän sisäänrakennettua funktiota lapply()- tai sapply()-funktioon. Luomme funktion nimeltä avg laskemaan vektorin minimi- ja maksimiarvojen keskiarvon.

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

ulostulo

## speed  dist
##  14.5  61.0

Sapply R:ssä on tehokkaampi kuin lapply() palautetussa lähdössä, koska sapply() tallentaa arvot suoraan vektoriin. Seuraavassa esimerkissä näemme, että näin ei aina ole.

Voimme tiivistää eron apply(), sapply() ja `lapply() välillä seuraavassa taulukossa:

Toiminto argumentit Tavoite panos ulostulo
käyttää soveltaa (x, MARGIN, FUN) Käytä funktiota riveihin tai sarakkeisiin tai molempiin Tietokehys tai matriisi vektori, luettelo, taulukko
lapply lapply (X, FUN) Käytä funktiota kaikkiin syötteen elementteihin Lista, vektori tai datakehys lista
soveltaa sovelle (X, FUN) Käytä funktiota kaikkiin syötteen elementteihin Lista, vektori tai datakehys vektori tai matriisi

Viipaletta vektori

Voimme käyttää lapply()- tai sapply()-muuttujaa datakehyksen leikkaamiseen. Luomme funktion, alle_average(), joka ottaa numeeristen arvojen vektorin ja palauttaa vektorin, joka sisältää vain arvot, jotka ovat ehdottomasti keskiarvon yläpuolella. Vertaamme molempia tuloksia identtisen()-funktion kanssa.

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)

lähtö:

## [1] TRUE

tapply()-funktio

tapply() laskee arvon (keskiarvo, mediaani, min, max jne.) tai funktion kullekin vektorin tekijämuuttujalle. Se on erittäin hyödyllinen funktio, jonka avulla voit luoda vektorin osajoukon ja sitten käyttää joitain toimintoja jokaiseen osajoukkoon.

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

Osa datatieteilijän tai tutkijan työtä on laskea yhteenvetoja muuttujista. Mittaa esimerkiksi keskiarvo tai ryhmätiedot ominaisuuden perusteella. Suurin osa tiedoista on ryhmitelty tunnuksen, kaupungin, maiden ja niin edelleen mukaan. Ryhmän yhteenvedon tekeminen paljastaa mielenkiintoisempia malleja.

Ymmärtääksemme, miten se toimii, käytetään iiristietojoukkoa. Tämä tietojoukko on erittäin kuuluisa koneoppimisen maailmassa. Tämän tietojoukon tarkoituksena on ennustaa kunkin kolmen kukkalajin luokka: Sepal, Versicolor, Virginica. Aineisto kerää jokaisesta lajista tietoa niiden pituudesta ja leveydestä.

Aiempana työnä voimme laskea kunkin lajin pituuden mediaanin. Napauta R:ssä on nopea tapa suorittaa tämä laskenta.

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

lähtö:

##     setosa versicolor  virginica 
##        3.4        2.8        3.0