Apply (), lapply (), sapply (), tapply () Функция в R с примери

Съдържание:

Anonim

Този урок има за цел да представи колекцията от функции apply (). Функцията apply () е най-основната от цялата колекция. Също така ще научим sapply (), lapply () и tapply (). Колекцията за прилагане може да се разглежда като заместител на цикъла.

Колекцията apply () е в комплект с r съществен пакет, ако инсталирате R с Anaconda. Функцията apply () може да се подава с много функции за изпълнение на излишно приложение върху колекция от обекти (рамка от данни, списък, вектор и т.н.). Целта на apply () е преди всичко да избягва изрично използване на циклични конструкции. Те могат да се използват за входен списък, матрица или масив и да прилагат функция. Всяка функция може да бъде предадена на apply ().

В този урок ще научите

  • функция apply ()
  • функция lapply ()
  • функция sapply ()
  • Вектор на среза
  • функция tapply ()

функция apply ()

apply () приема рамка или матрица за данни като вход и дава изход във вектор, списък или масив. Функцията apply () се използва предимно за избягване на изрично използване на циклични конструкции. Това е най-основната от всички колекции, която може да се използва за матрица.

Тази функция отнема 3 аргумента:

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>

Най-простият пример е да сумирате matrice за всички колони. Приложимият код (m1, 2, sum) ще приложи функцията sum към матрицата 5x6 и ще върне сумата на всяка колона, достъпна в набора от данни.

m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1

Изход:

Най-добра практика: Съхранявайте стойностите, преди да ги отпечатате на конзолата.

функция lapply ()

Функцията lapply () е полезна за извършване на операции върху обекти от списък и връща обект от списък със същата дължина на оригиналния набор. lappy () връща списък с подобна дължина като обект на входен списък, всеки елемент от който е резултат от прилагането на FUN към съответния елемент от списъка. lapply () приема списък, вектор или рамка с данни като вход и дава изход в списъка.

lapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x

l в lapply () означава списък. Разликата между lapply () и apply () е между възвръщаемостта на изхода. Резултатът от lapply () е списък. lapply () може да се използва за други обекти като рамки за данни и списъци.

функцията lapply () не се нуждае от MARGIN.

Много лесен пример може да бъде промяната на низовата стойност на матрица с малки букви с функцията tolower. Изграждаме матрица с името на известните филми. Името е във формат с главни букви.

movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")movies_lower <-lapply(movies, tolower)str(movies_lower)

Изход:

## List of 4## $:chr"spyderman"## $:chr"batman"## $:chr"vertigo"## $:chr"chinatown"

Можем да използваме unlist (), за да конвертираме списъка във вектор.

movies_lower <-unlist(lapply(movies,tolower))str(movies_lower)

Изход:

## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"

функция sapply ()

Функцията sapply () взема списък, вектор или кадър от данни като вход и дава изход във вектор или матрица. Полезно е за операции с обекти от списък и връща обект от списък със същата дължина на оригиналния набор. Функцията sapply () върши същата работа като функцията lapply (), но връща вектор.

sapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x

Можем да измерим минималната скорост и спирачния път на автомобилите от набора от данни за автомобили.

dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars

Изход:

## $speed## [1] 4## $dist## [1] 2
smn_cars

Изход:

## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars

Изход:

## $speed## [1] 25## $dist## [1] 120
smxcars

Изход:

## speed dist## 25 120

Можем да използваме вградена от потребителя функция в lapply () или sapply (). Създаваме функция на име avg, за да изчислим средната стойност на минимума и максимума на вектора.

avg <- function(x) {( min(x) + max(x) ) / 2}fcars <- sapply(dt, avg)fcars

Изход

## speed dist## 14.5 61.0

Функцията sapply () е по-ефективна от lapply () във върнатия изход, защото sapply () съхранява стойности директно във вектор. В следващия пример ще видим, че това не винаги е така.

Можем да обобщим разликата между apply (), sapply () и `lapply () в следната таблица:

Функция

Аргументи

Обективен

Вход

Изход

Приложи

прилага (x, MARGIN, FUN)

Приложете функция към редовете или колоните или и двете

Рамка за данни или матрица

вектор, списък, масив

скучен

скучно (X, FUN)

Приложете функция към всички елементи на входа

Списък, вектор или рамка с данни

списък

саппли

сок (X FUN)

Приложете функция към всички елементи на входа

Списък, вектор или рамка с данни

вектор или матрица

Вектор на среза

Можем да използваме lapply () или sapply () взаимозаменяеми, за да нарязваме рамка с данни. Създаваме функция, under_average (), която взема вектор от числови стойности и връща вектор, който съдържа само стойностите, които са строго над средното. Сравняваме и двата резултата с идентичната () функция.

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)

Изход:

## [1] TRUE

функция tapply ()

tapply () изчислява мярка (средна стойност, медиана, мин, макс и т.н. ...) или функция за всяка факторна променлива във вектор. Това е много полезна функция, която ви позволява да създадете подмножество на вектор и след това да приложите някои функции към всяко от подмножеството.

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

Част от работата на учен или изследователи на данни е да изчислява обобщения на променливи. Например, измервайте средните или групови данни въз основа на характеристика. Повечето от данните са групирани по идентификационен номер, град, държави и т.н. Обобщаването по групи разкрива още интересни модели.

За да разберем как работи, нека използваме набора от данни за ириса. Този набор от данни е много известен в света на машинното обучение. Целта на този набор от данни е да се предвиди класът на всеки от трите вида цветя: Sepal, Versicolor, Virginica. Наборът данни събира информация за всеки вид относно тяхната дължина и ширина.

Като предварителна работа можем да изчислим медианата на дължината за всеки вид. tapply () е бърз начин за извършване на това изчисление.

data(iris)tapply(iris$Sepal.Width, iris$Species, median)

Изход:

## setosa versicolor virginica## 3.4 2.8 3.0