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ö:
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