Функцию 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