Lapply проти sapply в r: у чому різниця?


Функцію lapply() в R можна використовувати для застосування функції до кожного елемента списку, вектора або кадру даних і отримання відповідного списку .

Функцію sapply() також можна використовувати для застосування функції до кожного елемента списку, вектора або кадру даних, але в результаті вона повертає вектор .

У наступних прикладах показано, як використовувати кожну з цих функцій у R.

Приклад: як використовувати apply() у R

Наступний код показує, як використовувати функцію lapply() для множення кожного значення в кожному стовпці кадру даних на 2:

 #create data frame
df <- data. frame (x=c(1, 2, 2, 3, 5),
                 y=c(4, 4, 6, 7, 8),
                 z=c(7, 7, 9, 9, 9))

#view data frame
df

  X Y Z
1 1 4 7
2 2 4 7
3 2 6 9
4 3 7 9
5 5 8 9

#multiply each value in each column by 2
lapply(df, function (df) df*2)

$x
[1] 2 4 4 6 10

$y
[1] 8 8 12 14 16

$z
[1] 14 14 18 18 18

Зверніть увагу, що результатом є список.

Приклад: як використовувати sapply() у R

У наступному коді показано, як використовувати функцію sapply() для множення кожного значення в кожному стовпці кадру даних на 2:

 #create data frame
df <- data. frame (x=c(1, 2, 2, 3, 5),
                 y=c(4, 4, 6, 7, 8),
                 z=c(7, 7, 9, 9, 9))

#view data frame
df

  X Y Z
1 1 4 7
2 2 4 7
3 2 6 9
4 3 7 9
5 5 8 9

#multiply each value in each column by 2
sapply(df, function (df) df*2)

      X Y Z
[1,] 2 8 14
[2,] 4 8 14
[3,] 4 12 18
[4,] 6 14 18
[5,] 10 16 18

Зверніть увагу, що результатом є векторна матриця.

Зверніть увагу, що ви можете використовувати as.data.frame() для повернення кадру даних замість матриці:

 #multiply each value in each column by 2 and return a data frame
as. data . frame (sapply(df, function (df) df*2))

   X Y Z
1 2 8 14
2 4 8 14
3 4 12 18
4 6 14 18
5 10 16 18

Коли використовувати lapply() або sapply()

У 99% випадків ви будете використовувати sapply() , тому що має сенс повертати вектор або матрицю.

Однак у рідкісних випадках вам може знадобитися замість цього використовувати lapply() , якщо ви хочете, щоб результатом був список.

Зверніть увагу, що sapply() і lappy() виконують однакові операції з вектором, матрицею або кадром даних. Єдина відмінність полягає в класі повернутого об’єкта.

Додаткові ресурси

Як застосувати функцію до кожного рядка кадру даних у R
Як використовувати функцію colSums() у R
Як використовувати функцію rowSums() у R

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *