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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *