Этот урок направлен на ознакомление с коллекцией функций apply (). Функция apply () является самой базовой из всей коллекции. Мы также изучим sapply (), lapply () и tapply (). Применить коллекцию можно рассматривать как замену цикла.
В коллекцию apply () входит необходимый пакет r , если вы устанавливаете R вместе с Anaconda. Функция apply () может быть снабжена множеством функций для выполнения избыточного применения к коллекции объектов (фрейм данных, список, вектор и т. Д.). Цель apply () в первую очередь состоит в том, чтобы избежать явного использования конструкций цикла. Их можно использовать для ввода списка, матрицы или массива и применять функцию. Любая функция может быть передана в 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>
Простейшим примером является суммирование матрицы по всем столбцам. Применяемый код (m1, 2, sum) применяет функцию суммы к матрице 5×6 и возвращает сумму каждого столбца, доступного в наборе данных.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6) m1 a_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 <- cars lmn_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 () сохраняет значения direclty в векторе. В следующем примере мы увидим, что это не всегда так.
Мы можем суммировать разницу между apply (), sapply () и `lapply () в следующей таблице:
функция |
аргументы |
Задача |
вход |
Вывод |
---|---|---|---|---|
применять |
применить (х, маржа, весело) |
Применить функцию к строкам или столбцам или обоим |
Фрейм данных или матрица |
вектор, список, массив |
lapply |
радостно (X, весело) |
Применить функцию ко всем элементам ввода |
Список, вектор или фрейм данных |
список |
sapply |
Саппи (X FUN) |
Применить функцию ко всем элементам ввода |
Список, вектор или фрейм данных |
вектор или матрица |
Срез вектор
Мы можем использовать lapply () или sapply () взаимозаменяемыми, чтобы разрезать фрейм данных. Мы создаем функцию ниже_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
Часть работы ученого или исследователя данных состоит в том, чтобы вычислять резюме переменных. Например, измерьте средние или групповые данные на основе характеристики. Большинство данных сгруппированы по идентификатору, городу, странам и т. Д. Подведение итогов по группе раскрывает более интересные закономерности.
Чтобы понять, как это работает, давайте использовать набор данных iris. Этот набор данных очень известен в мире машинного обучения. Цель этого набора данных — предсказать класс каждого из трех видов цветов: Sepal, Versicolor, Virginica. Набор данных собирает информацию для каждого вида об их длине и ширине.
В качестве предыдущей работы мы можем вычислить медиану длины для каждого вида. tapply () — это быстрый способ выполнить это вычисление.
data(iris) tapply(iris$Sepal.Width, iris$Species, median)
Вывод:
## setosa versicolor virginica ## 3.4 2.8 3.0