Selle õpetuse eesmärk on tutvustada rakenduse () funktsiooni kogu. Funktsioon Apply () on kogu kogu põhilisem. Õpime ka sapply (), lapply () ja tapply (). Rakenda kollektsiooni saab vaadata silmuse asendajana.
Kui installite R koos Anacondaga, on kollektsioon Apply () ühendatud r olulise paketiga. Funktsiooni Apply () saab edastada paljude funktsioonidega, et objektikogumile (andmeraam, loend, vektor jne) teha üleliigne rakendus. Apply () eesmärk on eelkõige vältida silmusekonstruktsioonide selgesõnalist kasutamist. Neid saab kasutada sisendloendi, maatriksi või massiivi jaoks ja rakendada funktsiooni. Mis tahes funktsiooni saab rakendada Apply ().
Selles õpetuses saate teada
- Apply () funktsioon
- funktsioon lapply ()
- funktsioon sapply ()
- Viiluvektor
- tapmisfunktsioon ()
Apply () funktsioon
Apply () võtab sisendiks andmeraami või maatriksi ja annab väljundi vektoris, loendis või massiivis. Apply () Funktsiooni kasutatakse peamiselt silmusekonstruktsioonide selgesõnalise kasutamise vältimiseks. See on kõige põhilisem kõigist kollektsioonidest, mida saab kasutada maatriksi kohal.
Sellel funktsioonil on 3 argumenti:
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>
Lihtsaim näide on kõigi veergude maatriksi summeerimine. Rakendatav kood (m1, 2, summa) rakendab maatriksile 5x6 summafunktsiooni ja tagastab iga andmekogumisse ligipääsetava veeru summa.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1
Väljund:
Parim tava: enne konsooli printimist salvestage väärtused.
funktsioon lapply ()
Funktsioon lapply () on kasulik loendiobjektidega toimingute tegemiseks ja tagastab sama pikkusega algse komplekti loendiobjekti . lappy () tagastab sisendloendi objektiga sarnase pikkusega loendi, mille iga element on FUN-i rakendamise loendi vastavale elemendile tulemus. lapply () võtab sisendina loendi, vektori või andmeraami ja annab loendis väljundi.
lapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
l in lapply () tähistab loendit. Erinevus lapply () ja Apply () vahel on väljunditagastuse vahel. Lapply () väljund on loend. lapply () saab kasutada teiste objektide jaoks, näiteks andmeraamide ja loendite jaoks.
funktsioon lapply () ei vaja MARGIN.
Väga lihtne näide võib olla maatriksi stringi väärtuse muutmine tolower-funktsiooniga väiketäheks. Ehitame kuulsate filmide nimega maatriksi. Nimi on suurtähtedega.
movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")movies_lower <-lapply(movies, tolower)str(movies_lower)
Väljund:
## List of 4## $:chr"spyderman"## $:chr"batman"## $:chr"vertigo"## $:chr"chinatown"
Loendi vektoriks teisendamiseks saame kasutada loendit ().
movies_lower <-unlist(lapply(movies,tolower))str(movies_lower)
Väljund:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
funktsioon sapply ()
Funktsioon sapply () võtab sisendina loendi, vektori või andmeraami ja annab väljundi vektoris või maatriksis. See on kasulik loendiobjektidega toiminguteks ja tagastab sama pikkusega algse komplekti loendiobjekti. Funktsioon sapply () teeb sama funktsiooni nagu funktsioon lapply (), kuid tagastab vektori.
sapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
Autode andmekogust saame mõõta autode minimaalset kiirust ja peatumisteekondi.
dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars
Väljund:
## $speed## [1] 4## $dist## [1] 2
smn_cars
Väljund:
## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars
Väljund:
## $speed## [1] 25## $dist## [1] 120
smxcars
Väljund:
## speed dist## 25 120
Saame kasutada kasutaja sisseehitatud funktsiooni lapply () või sapply (). Vektori miinimumi ja maksimumi keskmise arvutamiseks loome funktsiooni nimega avg.
avg <- function(x) {( min(x) + max(x) ) / 2}fcars <- sapply(dt, avg)fcars
Väljund
## speed dist## 14.5 61.0
Funktsioon sapply () on tagastatud väljundis efektiivsem kui lapply (), kuna sapply () salvestab väärtused otse vektorisse. Järgmises näites näeme, et see pole alati nii.
Järgmises tabelis võime kokku võtta rakenduse (), sapply () ja `lapply () erinevuse:
Funktsioon |
Argumendid |
Eesmärk |
Sisend |
Väljund |
---|---|---|---|---|
kohaldada |
rakendama (x, MARGIN, FUN) |
Funktsioonide rakendamine ridadele või veergudele või mõlemale |
Andmeraam või maatriks |
vektor, loend, massiiv |
lapply |
lapply (X, FUN) |
Rakendage funktsioon kõigile sisendi elementidele |
Loend, vektor või andmeraam |
nimekiri |
sapply |
õnnelik (X FUN) |
Rakendage funktsioon kõigile sisendi elementidele |
Loend, vektor või andmeraam |
vektor või maatriks |
Viiluvektor
Andmeraami viilutamiseks võime kasutada lapply () või sapply () vahetatavaid. Loome funktsiooni alla_keskmine (), mis võtab arvväärtuste vektori ja tagastab vektori, mis sisaldab ainult keskmisest rangelt kõrgemaid väärtusi. Võrdleme mõlemat tulemust identse () funktsiooniga.
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)
Väljund:
## [1] TRUE
tapmisfunktsioon ()
tapply () arvutab vektori iga teguri muutuja jaoks mõõtmise (keskmise, mediaani, min, max jne ...) või funktsiooni. See on väga kasulik funktsioon, mis võimaldab teil luua vektori alamhulka ja seejärel rakendada mõningaid funktsioone igale alamhulgale.
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
Andmeteadlase või teadlaste töö osa on muutujate kokkuvõtete arvutamine. Näiteks mõõdetakse keskmise või grupi andmeid tunnuse põhjal. Enamik andmeid on rühmitatud ID, linna, riikide jms järgi. Grupi kokkuvõtete tegemisel ilmnevad huvitavamad mustrid.
Selle toimimise mõistmiseks kasutame iirise andmekogumit. See andmekogum on masinõppe maailmas väga kuulus. Selle andmekogumi eesmärk on ennustada kolme lilleliigi klassi: Sepal, Versicolor, Virginica. Andmekogum kogub iga liigi kohta teavet nende pikkuse ja laiuse kohta.
Varasema tööna saame arvutada iga liigi pikkuse mediaani. tapply () on selle arvutamise kiire viis.
data(iris)tapply(iris$Sepal.Width, iris$Species, median)
Väljund:
## setosa versicolor virginica## 3.4 2.8 3.0