lapply и sapply в R: в чем разница?


Функцию lapply() в R можно использовать для применения функции к каждому элементу списка, вектора или фрейма данных и получения в результате списка .

Функцию sapply() также можно использовать для применения функции к каждому элементу списка, вектора или фрейма данных, но в результате она возвращает вектор .

В следующих примерах показано, как использовать каждую из этих функций в R.

Пример: как использовать lapply() в 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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.