Функція apply (), lapply (), sapply (), tapply () у R із прикладами

Зміст:

Anonim

Цей підручник спрямований на введення колекції функцій apply (). Функція apply () є найпростішою з усіх колекцій. Ми також вивчимо sapply (), lapply () та tapply (). Колекцію apply можна розглядати як заміну циклу.

Колекція apply () постачається з основним пакетом r, якщо ви встановлюєте R за допомогою Anaconda. Функція apply () може подаватись із багатьма функціями для виконання надлишкового додатка на колекції об’єктів (фрейм даних, список, вектор тощо). Метою apply () є насамперед уникнення явного використання конструкцій циклу. Вони можуть використовуватися для списку введення, матриці або масиву та застосовувати функцію. Будь-яку функцію можна передати у apply ().

У цьому підручнику ви дізнаєтесь

  • застосувати функцію ()
  • функція lapply ()
  • функція sapply ()
  • Фрагмент вектор
  • функція tapply ()

застосувати функцію ()

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) застосує функцію 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)

Застосувати функцію до рядків або стовпців або до обох

Кадр даних або матриця

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

вапняний

lapply (X, FUN)

Застосувати функцію до всіх елементів вводу

Список, вектор або кадр даних

список

соплей

саппі (X FUN)

Застосувати функцію до всіх елементів вводу

Список, вектор або кадр даних

вектор або матриця

Фрагмент вектор

Ми можемо використовувати lapply () або sapply () взаємозамінні, щоб нарізати кадр даних. Ми створюємо функцію below_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