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

Содержание:

Anonim

Этот учебник направлен на введение в коллекцию функций 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