Denne veiledningen tar sikte på å introdusere funksjonssamlingen Apply (). Apply () -funksjonen er den mest grunnleggende av all samling. Vi lærer også sapply (), lapply () og tapply (). Bruk-samlingen kan sees på som en erstatning for løkken.
Apply () -samlingen leveres med r viktig pakke hvis du installerer R med Anaconda. Bruk () -funksjonen kan mates med mange funksjoner for å utføre overflødig applikasjon på en samling objekter (dataramme, liste, vektor osv.). Formålet med Apply () er først og fremst å unngå eksplisitt bruk av loopkonstruksjoner. De kan brukes til en inngangsliste, matrise eller matrise og bruke en funksjon. Enhver funksjon kan overføres til anvendelse ().
I denne veiledningen vil du lære
- bruke () funksjon
- lapply () -funksjon
- sapply () -funksjon
- Skjær vektor
- tapply () -funksjon
bruke () funksjon
Apply () tar dataramme eller matrise som inngang og gir utdata i vektor, liste eller matrise. Apply () Funksjonen brukes primært for å unngå eksplisitt bruk av loopkonstruksjoner. Det er den mest grunnleggende av alle samlinger som kan brukes over en matrise.
Denne funksjonen tar 3 argumenter:
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>
Det enkleste eksemplet er å summere en matrise over alle kolonnene. Koden gjelder (m1, 2, sum) vil bruke sumfunksjonen til matrisen 5x6 og returnere summen av hver kolonne som er tilgjengelig i datasettet.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1
Produksjon:
Beste fremgangsmåten: Lagre verdiene før du skriver dem ut på konsollen.
lapply () -funksjon
lapply () -funksjonen er nyttig for å utføre operasjoner på listeobjekter og returnerer et listeobjekt med samme lengde på originalsettet. lappy () returnerer en liste med samme lengde som inngangslisteobjektet, hvor hvert element er resultatet av å bruke FUN til det tilsvarende elementet i listen. lapply () tar liste, vektor eller dataramme som input og gir output i listen.
lapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
Jeg i lapply () står for liste. Forskjellen mellom lapply () og Apply () ligger mellom output return. Resultatet av lapply () er en liste. lapply () kan brukes til andre objekter som datarammer og lister.
lapply () -funksjonen trenger ikke MARGIN.
Et veldig enkelt eksempel kan være å endre strengverdien til en matrise til små bokstaver med lavere funksjon. Vi konstruerer en matrise med navnet på de berømte filmene. Navnet er i store bokstaver.
movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")movies_lower <-lapply(movies, tolower)str(movies_lower)
Produksjon:
## List of 4## $:chr"spyderman"## $:chr"batman"## $:chr"vertigo"## $:chr"chinatown"
Vi kan bruke unlist () til å konvertere listen til en vektor.
movies_lower <-unlist(lapply(movies,tolower))str(movies_lower)
Produksjon:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
sapply () -funksjon
sapply () -funksjonen tar liste, vektor eller dataramme som inngang og gir utdata i vektor eller matrise. Det er nyttig for operasjoner på listeobjekter og returnerer et listeobjekt med samme lengde på originalsettet. sapply () -funksjonen gjør den samme jobben som lapply () -funksjonen, men returnerer en vektor.
sapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
Vi kan måle minimumshastighet og stoppavstand for biler fra datasettet.
dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars
Produksjon:
## $speed## [1] 4## $dist## [1] 2
smn_cars
Produksjon:
## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars
Produksjon:
## $speed## [1] 25## $dist## [1] 120
smxcars
Produksjon:
## speed dist## 25 120
Vi kan bruke en innebygd brukerfunksjon til lapply () eller sapply (). Vi oppretter en funksjon som heter avg for å beregne gjennomsnittet av minimum og maksimum for vektoren.
avg <- function(x) {( min(x) + max(x) ) / 2}fcars <- sapply(dt, avg)fcars
Produksjon
## speed dist## 14.5 61.0
sapply () -funksjonen er mer effektiv enn lapply () i den returnerte utgangen fordi sapply () lagrer verdier direkte i en vektor. I neste eksempel vil vi se at dette ikke alltid er tilfelle.
Vi kan oppsummere forskjellen mellom apply (), sapply () og `lapply () i følgende tabell:
Funksjon |
Argumenter |
Objektiv |
Inngang |
Produksjon |
---|---|---|---|---|
søke om |
gjelder (x, MARGIN, FUN) |
Bruk en funksjon på radene eller kolonnene eller begge deler |
Dataramme eller matrise |
vektor, liste, matrise |
lapply |
lapply (X, FUN) |
Bruk en funksjon på alle elementene i inngangen |
Liste, vektor eller dataramme |
liste |
sapply |
sappy (X FUN) |
Bruk en funksjon på alle elementene i inngangen |
Liste, vektor eller dataramme |
vektor eller matrise |
Skjær vektor
Vi kan bruke utskiftbare lapply () eller sapply () for å skjære en dataramme. Vi oppretter en funksjon under gjennomsnittet () som tar en vektor med numeriske verdier og returnerer en vektor som bare inneholder verdiene som er strengt over gjennomsnittet. Vi sammenligner begge resultatene med den identiske () funksjonen.
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)
Produksjon:
## [1] TRUE
tapply () -funksjon
tapply () beregner et mål (gjennomsnitt, median, min, maks, etc ...) eller en funksjon for hver faktorvariabel i en vektor. Det er en veldig nyttig funksjon som lar deg lage et delsett av en vektor og deretter bruke noen funksjoner på hvert av delsettene.
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
En del av jobben til en datavitenskapsmann eller forskere er å beregne sammendrag av variabler. For eksempel måle gjennomsnitt eller gruppedata basert på en karakteristikk. De fleste av dataene er gruppert etter ID, by, land og så videre. Oppsummering over gruppe avslører mer interessante mønstre.
For å forstå hvordan det fungerer, la oss bruke iris-datasettet. Dette datasettet er veldig kjent i verden av maskinlæring. Hensikten med dette datasettet er å forutsi klassen til hver av de tre blomsteartene: Sepal, Versicolor, Virginica. Datasettet samler informasjon for hver art om lengden og bredden.
Som et tidligere arbeid kan vi beregne medianen på lengden for hver art. tapply () er en rask måte å utføre denne beregningen på.
data(iris)tapply(iris$Sepal.Width, iris$Species, median)
Produksjon:
## setosa versicolor virginica## 3.4 2.8 3.0