Tämän opetusohjelman tarkoituksena on esitellä Apply () -funktiokokoelma. Apply () -funktio on kaikkein perustavin kokoelma. Opimme myös sapply (), lapply () ja tapply (). Sovelluskokoelmaa voidaan pitää silmukan korvikkeena.
Apply () -kokoelma sisältää r välttämättömän paketin, jos asennat R: n Anacondan kanssa. Apply () -toimintoa voidaan syöttää monilla toiminnoilla redundantin sovelluksen suorittamiseksi objektikokoelmalle (datakehys, luettelo, vektori jne.). Sovelluksen () tarkoituksena on ensisijaisesti välttää silmukkarakenteiden nimenomaista käyttöä. Niitä voidaan käyttää tuloluettelossa, matriisissa tai taulukossa ja soveltaa toimintoa. Mikä tahansa toiminto voidaan siirtää sovellettavaksi ().
Tässä opetusohjelmassa opit
- Apply () -toiminto
- lapply () -toiminto
- sapply () -toiminto
- Viipalevektori
- tappava () -toiminto
Apply () -toiminto
Apply () ottaa datakehyksen tai matriisin tuloksi ja antaa ulostulon vektorina, luettelona tai matriisina. Apply () Funktiota käytetään ensisijaisesti silmukkarakenteiden nimenomaisen käytön välttämiseen. Se on alkeellisinta kaikista kokoelmista, joita voidaan käyttää matriisin päällä.
Tässä toiminnossa on 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 matriisi kaikkien sarakkeiden yli. Koodi soveltaa (m1, 2, summa) käyttää summatoimintoa matriisiin 5x6 ja palauttaa kunkin tietojoukossa olevan sarakkeen summan.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1
Tuotos:
Paras käytäntö: Tallenna arvot ennen tulostamista konsolille.
lapply () -toiminto
lapply () -toiminto on hyödyllinen operaatioiden suorittamiseksi luettelo-objekteille ja palauttaa saman kokoisen luettelo-objektin kuin alkuperäinen joukko. lappy () palauttaa luettelon, jonka pituus on samanlainen kuin syöteluetteloobjektin, jonka jokainen osa on seurausta FUN: n soveltamisesta vastaavaan luettelon elementtiin. lapply () ottaa luettelon, vektorin tai datakehyksen syötteeksi ja antaa tuotoksen luettelossa.
lapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
l in lapply () tarkoittaa luetteloa. Lapply (): n ja Apply (): n ero on lähtöpalautuksen välillä. Lapply () -lähtö on luettelo. lapply () -sovellusta voidaan käyttää muihin kohteisiin, kuten tietokehyksiin ja luetteloihin.
funktio lapply () ei tarvitse MARGIN.
Erittäin helppo esimerkki voi olla matriisin merkkijonon arvon muuttaminen pienikokoiseksi tolower-toiminnolla. Rakennamme matriisin, jossa on tunnettujen elokuvien nimi. Nimi on isoja kirjaimia.
movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")movies_lower <-lapply(movies, tolower)str(movies_lower)
Tuotos:
## List of 4## $:chr"spyderman"## $:chr"batman"## $:chr"vertigo"## $:chr"chinatown"
Voimme käyttää unlist (): tä muunnettaessa luettelo vektoriksi.
movies_lower <-unlist(lapply(movies,tolower))str(movies_lower)
Tuotos:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
sapply () -toiminto
sapply () -funktio ottaa luettelon, vektorin tai datakehyksen syötteeksi ja antaa ulostulon vektorissa tai matriisissa. Se on hyödyllinen luettelo-objekteille tehtävissä toiminnoissa ja palauttaa luettelo-objektin, joka on yhtä pitkä kuin alkuperäinen joukko. 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 vähimmäisnopeuden ja pysäytysmatkat autojen tietojoukosta.
dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars
Tuotos:
## $speed## [1] 4## $dist## [1] 2
smn_cars
Tuotos:
## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars
Tuotos:
## $speed## [1] 25## $dist## [1] 120
smxcars
Tuotos:
## speed dist## 25 120
Voimme käyttää käyttäjän sisäänrakennettua toimintoa osiin lapply () tai sapply (). Luomme funktion nimeltä avg laskemaan vektorin minimin ja maksimin keskiarvon.
avg <- function(x) {( min(x) + max(x) ) / 2}fcars <- sapply(dt, avg)fcars
Tuotos
## speed dist## 14.5 61.0
sapply () -toiminto on tehokkaampi kuin lapply () palautetussa lähdössä, koska sapply () tallentaa arvot suoraan vektoriksi. Seuraavassa esimerkissä näemme, että näin ei ole aina.
Voimme esittää yhteenvedon sovelluksen (), sapply () ja `lapply () välisestä erosta seuraavassa taulukossa:
Toiminto |
Väitteet |
Tavoite |
Tulo |
Tuotos |
---|---|---|---|---|
Käytä |
käytä (x, MARGIN, FUN) |
Lisää funktio riveille tai sarakkeille tai molemmille |
Datakehys tai matriisi |
vektori, luettelo, taulukko |
iloisesti |
iloisesti (X, FUN) |
Käytä toimintoa syötteen kaikkiin elementteihin |
Luettelo, vektori tai datakehys |
lista |
sapply |
onnellinen (X FUN) |
Käytä toimintoa syötteen kaikkiin elementteihin |
Luettelo, vektori tai datakehys |
vektori tai matriisi |
Viipalevektori
Voimme käyttää lapply () tai sapply () vaihdettavissa datakehyksen viipaloimiseksi. Luomme funktion alle_keskiarvo (), joka ottaa vektorin numeerisista arvoista ja palauttaa vektorin, joka sisältää vain ne arvot, jotka ovat tiukasti keskiarvon yläpuolella. Vertaamme molempia tuloksia identtiseen () funktioon.
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)
Tuotos:
## [1] TRUE
tappava () -toiminto
tapply () laskee vektorin jokaisen tekijämuuttujan ( keskiarvo, mediaani, min, max jne.) tai funktion. Se on erittäin hyödyllinen toiminto, jonka avulla voit luoda vektorin osajoukon ja soveltaa sitten joitain toimintoja kuhunkin 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 tutkijoiden tehtävistä on laskea muuttujien yhteenvedot. Mittaa esimerkiksi keskiarvo tai ryhmätiedot ominaisuuksien perusteella. Suurin osa tiedoista on ryhmitelty henkilötodistuksen, kaupungin, maiden ja niin edelleen. Yhteenveto ryhmästä paljastaa mielenkiintoisempia malleja.
Ymmärrämme miten se toimii, käytetään iiris-tietojoukkoa. 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ää tietoja jokaisesta lajista niiden pituudesta ja leveydestä.
Aikaisempana työnä voimme laskea kunkin lajin pituuden mediaanin. tapply () on nopea tapa suorittaa tämä laskenta.
data(iris)tapply(iris$Sepal.Width, iris$Species, median)
Tuotos:
## setosa versicolor virginica## 3.4 2.8 3.0