R apply(), lapply(), sapply(), tapply() koos näidetega
Selle õpetuse eesmärk on tutvustada funktsioonide kogut apply (). Funktsioon apply() on kõigist kogudest kõige elementaarsem. Õpime ka sapply(), lapply() ja tapply(). Rakenduskollektsiooni saab vaadelda tsükli asendajana.
Kollektsioon apply() on komplektis r hädavajalik pakett, kui sa installige R koos Anacondaga. Funktsiooni Rakenda R-s saab toita paljude funktsioonidega, et teostada objektikogumi (andmeraam, loend, vektor jne) üleliigset rakendust. Rakenduse apply() eesmärk on eelkõige vältida silmuskonstruktsioonide selgesõnalist kasutamist. Neid saab kasutada sisendloendi, maatriksi või massiivi jaoks ja funktsiooni rakendamiseks. Rakendusse apply () saab edastada mis tahes funktsiooni.
funktsioon apply().
rakendama () võtab sisendiks andmeraami või maatriksi ja annab väljundi vektorina, loendina või massiivina. Rakenda funktsioon R-is kasutatakse peamiselt silmuskonstruktsioonide selgesõnalise kasutamise vältimiseks. See on kõigist kogudest kõige elementaarsem, mida saab kasutada maatriksites.
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 liitmine. Kood rakenda (m1, 2, summa) rakendab summafunktsiooni maatriksile 5 × 6 ja tagastab iga andmestikus juurdepääsetava veeru summa.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6) m1 a_m1 <- apply(m1, 2, sum) a_m1
Väljund:
Parim tava: salvestage väärtused enne nende konsooli printimist.
funktsioon lapply().
lapply() Funktsioon on kasulik loendiobjektidega toimingute tegemiseks ja tagastab algse komplektiga sama pikkuse loendiobjekti. lappy() tagastab sisendloendiobjektiga sarnase pikkusega loendi, mille iga element tuleneb FUN-i rakendamisest loendi vastavale elemendile. Lapply in R võtab sisendiks loendi, vektori või andmeraami ja annab väljundi loendis.
lapply(X, FUN) Arguments: -X: A vector or an object -FUN: Function applied to each element of x
l in lapply() tähistab loendit. Lapply() ja apply() erinevus seisneb väljundi tagastuses. Funktsiooni lapply() väljund on loend. Lapply() saab kasutada muude objektide jaoks, nagu andmeraamid ja loendid.
funktsioon lapply() ei vaja MARGIN.
Väga lihtne näide võib olla maatriksi stringi väärtuse muutmine väiketähtedeks funktsiooni tolower abil. Koostame maatriksi kuulsate filmide nimedega. Nimi on suurtähtedes.
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 unlist().
movies_lower <-unlist(lapply(movies,tolower)) str(movies_lower)
Väljund:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
funktsioon apply().
kohaldada () Funktsioon võtab sisendiks loendi, vektori või andmeraami ja annab väljundi vektoris või maatriks. See on kasulik loendiobjektidega tehtavate toimingute jaoks ja tagastab algse komplektiga sama pikkuse loendiobjekti. Funktsioon Sapply R-s teeb sama tööd kui funktsioon lapply(), kuid tagastab vektori.
sapply(X, FUN) Arguments: -X: A vector or an object -FUN: Function applied to each element of x
Autode andmestikust saame mõõta autode minimaalset kiirust ja peatumisteekonda.
dt <- cars lmn_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(). Loome funktsiooni nimega avg, et arvutada vektori miinimumi ja maksimumi keskmine.
avg <- function(x) { ( min(x) + max(x) ) / 2} fcars <- sapply(dt, avg) fcars
Väljund
## speed dist ## 14.5 61.0
Sapply in R on tagastatavas väljundis tõhusam kui lapply(), kuna sapply() salvestab väärtused otse vektorisse. Järgmises näites näeme, et see pole alati nii.
Järgmises tabelis saame kokku võtta erinevuse rakendus(), sapply() ja `lapply() vahel:
funktsioon | Argumendid | Eesmärk | Sisend | Väljund |
---|---|---|---|---|
kohaldada | rakenda (x, MARGIN, LÕBUS) | Rakendage ridadele või veergudele või mõlemale funktsiooni | Andmeraam või maatriks | vektor, loend, massiiv |
lapplik | lapply (X, LÕBUS) | Rakenda funktsioon kõikidele sisendi elementidele | Loend, vektor või andmeraam | nimekiri |
rakendama | rakenda (X, LÕBUS) | Rakenda funktsioon kõikidele sisendi elementidele | Loend, vektor või andmeraam | vektor või maatriks |
Lõikevektor
Andmeraami viilutamiseks saame kasutada vahetatavaid sõnu lapply() või sapply(). Loome funktsiooni Under_average(), mis võtab arvväärtuste vektori ja tagastab vektori, mis sisaldab ainult neid väärtusi, mis on rangelt üle keskmise. 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
funktsioon tapply().
koputage () arvutab vektori iga faktorimuutuja jaoks mõõdiku (keskmine, mediaan, min, max jne) või funktsiooni. See on väga kasulik funktsioon, mis võimaldab teil luua vektori alamhulga ja seejärel rakendada igale alamhulgale mõnda funktsiooni.
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
Üks osa andmeteadlase või teadlaste tööst on muutujate kokkuvõtete arvutamine. Näiteks mõõtke tunnuse põhjal keskmisi või rühmaandmeid. Enamik andmeid on rühmitatud ID, linna, riikide jne järgi. Rühma kokkuvõtteid tehes ilmnevad huvitavamad mustrid.
Et mõista, kuidas see toimib, kasutame vikerkesta andmestikku. See andmestik on masinõppe maailmas väga kuulus. Selle andmestiku eesmärk on ennustada iga kolme lilleliigi klassi: Sepal, Versicolor, Virginica. Andmekogum kogub iga liigi kohta teavet nende pikkuse ja laiuse kohta.
Eelneva tööna saame arvutada iga liigi pikkuse mediaani. R-i puudutamine on kiire viis selle arvutuse tegemiseks.
data(iris) tapply(iris$Sepal.Width, iris$Species, median)
Väljund:
## setosa versicolor virginica ## 3.4 2.8 3.0