Этот учебник направлен на введение в коллекцию функций apply (). Функция apply () - самая простая из всех коллекций. Мы также изучим sapply (), lapply () и tapply (). Коллекцию apply можно рассматривать как замену циклу.
Коллекция apply () идет в комплекте с пакетом r essential , если вы устанавливаете 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>
Самый простой пример - просуммировать матрицу по всем столбцам. Код apply (m1, 2, 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 () заключается между выходом return. Результатом 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 () для нарезки кадра данных. Мы создаем функцию below_average (), которая принимает вектор числовых значений и возвращает вектор, который содержит только значения, которые строго выше среднего. Мы сравниваем оба результата с функцией identify ().
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