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